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 more generally. We already honour
'-msg timestamp=on' in both (with duplicated code), and qemu_log
doesn't honour the '-msg guest-name=on' parameter, nor will it
include the binary name.
This series shouldn't be considered mutually exclusive with
Manos' backtrace suggestion above - it is complementary &
each proposal can be evaluated independently.
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.
I'm not too happy with the constructor priority
logic, but I don't see a better option, as I don't
think it is practical to order .o files passed to
the linker in a way that nicely guarantees the order
of constructor execution.
Daniel P. Berrangé (12):
include: define constant for early constructor priority
monitor: initialize global data from a constructor
system: unconditionally enable thread naming
util: set the name for the 'main' thread
util: add API to fetch the current thread id
util: add API to fetch the current thread name
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 +
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 | 20 +++----
util/meson.build | 1 +
util/message.c | 69 ++++++++++++++++++++++
util/qemu-thread-posix.c | 60 ++++++++++++++-----
util/qemu-thread-win32.c | 86 ++++++++++++++++++++--------
19 files changed, 321 insertions(+), 101 deletions(-)
create mode 100644 include/qemu/message.h
create mode 100644 util/message.c
--
2.50.1