All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 00/14] util: sync error_report & qemu_log output more closely
@ 2025-08-29 18:03 Daniel P. Berrangé
  2025-08-29 18:03 ` [PATCH v2 01/14] include: define constant for early constructor priority Daniel P. Berrangé
                   ` (13 more replies)
  0 siblings, 14 replies; 31+ messages in thread
From: Daniel P. Berrangé @ 2025-08-29 18:03 UTC (permalink / raw)
  To: qemu-devel
  Cc: Daniel P. Berrangé, Stefan Weil, qemu-block,
	Manos Pitsidianakis, Dr. David Alan Gilbert, Kevin Wolf,
	Hanna Reitz, Gerd Hoffmann, Christian Schoenebeck,
	Markus Armbruster, Marc-André Lureau, Paolo Bonzini,
	Philippe Mathieu-Daudé

This series is a tangent that came out of discussion in

   https://lists.nongnu.org/archive/html/qemu-devel/2025-08/msg00903.html

In thinking about adding thread info to error_report, I
came to realize we should likely make qemu_log behave
consistently with error_report & friends. We already
honour '-msg timestamp=on', but don't honour 'guest-name=on'
and also don't include the binary name.

As an example of the current state, consider mixing error and
log output today:

- Default context:

  # qemu-system-x86_64 -object tls-creds-x509,id=t0,dir=fish \
                       -d 'trace:qcrypto*'
  qcrypto_tls_creds_x509_load TLS creds x509 load creds=0x55ac6d97f700 dir=fish
  qcrypto_tls_creds_get_path TLS creds path creds=0x55ac6d97f700 filename=ca-cert.pem path=<none>
  qemu-system-x86_64: Unable to access credentials fish/ca-cert.pem: No such file or directory

- Full context:

  # qemu-system-x86_64 -object tls-creds-x509,id=t0,dir=fish \
                       -d 'trace:qcrypto*' \
                       -msg guest-name=on,timestamp=on \
                       -name "fish food"
  2025-08-19T20:14:16.791413Z qcrypto_tls_creds_x509_load TLS creds x509 load creds=0x55e9a3458d10 dir=fish
  2025-08-19T20:14:16.791429Z qcrypto_tls_creds_get_path TLS creds path creds=0x55e9a3458d10 filename=ca-cert.pem path=<none>
  2025-08-19T20:14:16.791433Z fish food qemu-system-x86_64: Unable to access credentials fish/ca-cert.pem: No such file or directory

And after this series is complete:

- Default context:

  # qemu-system-x86_64 -object tls-creds-x509,id=t0,dir=fish \
                      -d 'trace:qcrypto*'
  qemu-system-x86_64(1184284:main): qcrypto_tls_creds_x509_load TLS creds x509 load creds=0x55a24ad5cb30 dir=fish
  qemu-system-x86_64(1184284:main): qcrypto_tls_creds_get_path TLS creds path creds=0x55a24ad5cb30 filename=ca-cert.pem path=<none>
  qemu-system-x86_64(1184284:main): Unable to access credentials fish/ca-cert.pem: No such file or directory

- Full context:

  # qemu-system-x86_64 -object tls-creds-x509,id=t0,dir=fish \
                      -d 'trace:qcrypto*' \
                      -msg guest-name=on,timestamp=on \
                      -name "fish food"
  2025-08-19T20:12:50.211823Z [fish food] qemu-system-x86_64(1168876:main): qcrypto_tls_creds_x509_load TLS creds x509 load creds=0x5582183d8760 dir=fish
  2025-08-19T20:12:50.211842Z [fish food] qemu-system-x86_64(1168876:main): qcrypto_tls_creds_get_path TLS creds path creds=0x5582183d8760 filename=ca-cert.pem path=<none>
  2025-08-19T20:12:50.211846Z [fish food] qemu-system-x86_64(1168876:main): Unable to access credentials fish/ca-cert.pem: No such file or directory

The main things to note:

 * error_report/warn_report/qemu_log share the same
   output format and -msg applies to both

 * -msg debug-threads=on is now unconditionally enabled
   and thus the param is deprecated & ignored

 * Thread ID and name are unconditionally enabled

 * Guest name is surrounded in [...] brackets

 * The default output lines are typically 15 chars
   wider given that we always include the thread
   ID + name now

 * This takes the liberty of assigning the new file
   to the existing error-report.c maintainer (Markus)
   Since splitting it off into message.c instead of
   putting it all in error-report.c felt slightly
   nicer.

One thing I didn't tackle is making the location
info get reported for qemu_log. This is used to
give context for error messages when parsing some
CLI args, and could be interesting for log messages
associated with those same CLI args.

Changes in v2:

 - Re-use existing qemu_get_thread_id rather than
   re-inventing it as qemu_thread_get_id.
 - Expose qemu_thread_set_name and use it from all
   locations needing to set thread names
 - Fix qemu_log() to skip context prefix when
   emitting a log message in fragments across
   multiple calls
 - Skip allocating memory for empty context messages
 - Fix leak in win32 impl of qemu_thread_get_name
 - Use g_strlcpy where possible

Daniel P. Berrangé (14):
  include: define constant for early constructor priority
  monitor: initialize global data from a constructor
  system: unconditionally enable thread naming
  util: expose qemu_thread_set_name
  audio: make jackaudio use qemu_thread_set_name
  util: set the name for the 'main' thread
  util: add API to fetch the current thread name
  log: avoid prefix on split qemu_log calls
  util: introduce common helper for error-report & log code
  util: convert error-report & log to message API for timestamp
  util: add support for formatting a workload name in messages
  util: add support for formatting a program name in messages
  util: add support for formatting thread info in messages
  util: add brackets around guest name in message context

 MAINTAINERS                          |  2 +
 audio/jackaudio.c                    | 28 ++++++++--
 docs/about/deprecated.rst            |  7 +++
 include/qemu/compiler.h              |  8 +++
 include/qemu/error-report.h          |  4 --
 include/qemu/message.h               | 52 ++++++++++++++++++
 include/qemu/thread.h                |  3 +-
 meson.build                          | 21 +++++++
 monitor/monitor.c                    | 14 +++--
 storage-daemon/qemu-storage-daemon.c |  6 ++
 system/vl.c                          | 30 +++++++---
 tests/qemu-iotests/041               |  2 +-
 tests/qemu-iotests/common.filter     |  2 +-
 tests/unit/test-error-report.c       |  6 +-
 util/error-report.c                  | 29 ++--------
 util/log.c                           | 28 ++++++----
 util/meson.build                     |  1 +
 util/message.c                       | 73 +++++++++++++++++++++++++
 util/qemu-thread-posix.c             | 76 +++++++++++++++++---------
 util/qemu-thread-win32.c             | 82 +++++++++++++++++++---------
 20 files changed, 357 insertions(+), 117 deletions(-)
 create mode 100644 include/qemu/message.h
 create mode 100644 util/message.c

-- 
2.50.1



^ permalink raw reply	[flat|nested] 31+ messages in thread

end of thread, other threads:[~2025-09-11 12:00 UTC | newest]

Thread overview: 31+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-08-29 18:03 [PATCH v2 00/14] util: sync error_report & qemu_log output more closely Daniel P. Berrangé
2025-08-29 18:03 ` [PATCH v2 01/14] include: define constant for early constructor priority Daniel P. Berrangé
2025-08-30 21:56   ` Richard Henderson
2025-08-30 22:56   ` Dr. David Alan Gilbert
2025-08-29 18:03 ` [PATCH v2 02/14] monitor: initialize global data from a constructor Daniel P. Berrangé
2025-08-30 21:57   ` Richard Henderson
2025-08-30 23:00   ` Dr. David Alan Gilbert
2025-08-29 18:03 ` [PATCH v2 03/14] system: unconditionally enable thread naming Daniel P. Berrangé
2025-08-30 21:59   ` Richard Henderson
2025-09-11 11:59   ` Ján Tomko
2025-08-29 18:03 ` [PATCH v2 04/14] util: expose qemu_thread_set_name Daniel P. Berrangé
2025-08-30 22:01   ` Richard Henderson
2025-08-30 23:02   ` Dr. David Alan Gilbert
2025-08-29 18:03 ` [PATCH v2 05/14] audio: make jackaudio use qemu_thread_set_name Daniel P. Berrangé
2025-08-30 22:05   ` Richard Henderson
2025-08-30 23:12   ` Dr. David Alan Gilbert
2025-08-29 18:03 ` [PATCH v2 06/14] util: set the name for the 'main' thread Daniel P. Berrangé
2025-08-30 22:06   ` Richard Henderson
2025-08-30 23:26   ` Dr. David Alan Gilbert
2025-08-29 18:03 ` [PATCH v2 07/14] util: add API to fetch the current thread name Daniel P. Berrangé
2025-08-30 22:14   ` Richard Henderson
2025-09-01  8:49     ` Daniel P. Berrangé
2025-09-02 10:19       ` Richard Henderson
2025-08-29 18:03 ` [PATCH v2 08/14] log: avoid prefix on split qemu_log calls Daniel P. Berrangé
2025-08-29 18:03 ` [PATCH v2 09/14] util: introduce common helper for error-report & log code Daniel P. Berrangé
2025-09-02 10:22   ` Richard Henderson
2025-08-29 18:03 ` [PATCH v2 10/14] util: convert error-report & log to message API for timestamp Daniel P. Berrangé
2025-08-29 18:03 ` [PATCH v2 11/14] util: add support for formatting a workload name in messages Daniel P. Berrangé
2025-08-29 18:03 ` [PATCH v2 12/14] util: add support for formatting a program " Daniel P. Berrangé
2025-08-29 18:03 ` [PATCH v2 13/14] util: add support for formatting thread info " Daniel P. Berrangé
2025-08-29 18:03 ` [PATCH v2 14/14] util: add brackets around guest name in message context Daniel P. Berrangé

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.