The error_report function can include the guest name in any messages it prints. The qemu_log function has no equivalent behaviour.
This introduces support for a "workload name" in the new messages API, which in the case of system emulators will be the guest name. The possibility of defining a workload name for other binaries is left as an exercise for the future. This change has no impact on the output of the error_report function, but will change the qemu_log function. This can be easily seen with the 'log' trace backend, and how it is now more closely matching error_report output. Before: # qemu-system-x86_64 -msg guest-name=on -name blah -object tls-creds-x509,id=t0,dir=fish -d 'trace:qcrypto*' qcrypto_tls_creds_x509_load TLS creds x509 load creds=0x55b3af3fd870 dir=fish qcrypto_tls_creds_get_path TLS creds path creds=0x55b3af3fd870 filename=ca-cert.pem path=<none> blah qemu-system-x86_64: Unable to access credentials fish/ca-cert.pem: No such file or directory After: # qemu-system-x86_64 -msg guest-name=on -name blah -object tls-creds-x509,id=t0,dir=fish -d 'trace:qcrypto*' blah qcrypto_tls_creds_x509_load TLS creds x509 load creds=0x55b3af3fd870 dir=fish blah qcrypto_tls_creds_get_path TLS creds path creds=0x55b3af3fd870 filename=ca-cert.pem path=<none> blah qemu-system-x86_64: Unable to access credentials fish/ca-cert.pem: No such file or directory Signed-off-by: Daniel P. Berrangé <berra...@redhat.com> --- include/qemu/error-report.h | 3 --- include/qemu/message.h | 14 ++++++++++++-- system/vl.c | 6 ++++-- util/error-report.c | 7 ------- util/message.c | 19 +++++++++++++++++-- 5 files changed, 33 insertions(+), 16 deletions(-) diff --git a/include/qemu/error-report.h b/include/qemu/error-report.h index c8000778ec..ffc305f828 100644 --- a/include/qemu/error-report.h +++ b/include/qemu/error-report.h @@ -70,7 +70,4 @@ void error_init(const char *argv0); fmt, ##__VA_ARGS__); \ }) -extern bool error_with_guestname; -extern const char *error_guest_name; - #endif diff --git a/include/qemu/message.h b/include/qemu/message.h index 160bee8417..95fab69424 100644 --- a/include/qemu/message.h +++ b/include/qemu/message.h @@ -5,9 +5,10 @@ enum QMessageFormatFlags { QMESSAGE_FORMAT_TIMESTAMP = (1 << 0), + QMESSAGE_FORMAT_WORKLOAD_NAME = (1 << 1), }; -/* +/** * qmessage_set_format: * @flags: the message information to emit * @@ -16,11 +17,20 @@ enum QMessageFormatFlags { */ void qmessage_set_format(int flags); +/** + * qmessage_set_workload_name: + * @name: the name of the workload + * + * Set the workload name, which for a system emulator + * will be the guest VM name. + */ +void qmessage_set_workload_name(const char *name); + enum QMessageContextFlags { QMESSAGE_CONTEXT_SKIP_MONITOR = (1 << 0), }; -/* +/** * qmessage_context: * @flags: the message formatting control flags * diff --git a/system/vl.c b/system/vl.c index 696dd92669..fee6fdf7b1 100644 --- a/system/vl.c +++ b/system/vl.c @@ -818,7 +818,9 @@ static void configure_msg(QemuOpts *opts) if (qemu_opt_get_bool(opts, "timestamp", false)) { flags |= QMESSAGE_FORMAT_TIMESTAMP; } - error_with_guestname = qemu_opt_get_bool(opts, "guest-name", false); + if (qemu_opt_get_bool(opts, "guest-name", false)) { + flags |= QMESSAGE_FORMAT_WORKLOAD_NAME; + } qmessage_set_format(flags); } @@ -3520,7 +3522,7 @@ void qemu_init(int argc, char **argv) exit(1); } /* Capture guest name if -msg guest-name is used later */ - error_guest_name = qemu_opt_get(opts, "guest"); + qmessage_set_workload_name(qemu_opt_get(opts, "guest")); break; case QEMU_OPTION_prom_env: if (nb_prom_envs >= MAX_PROM_ENVS) { diff --git a/util/error-report.c b/util/error-report.c index 932af5d9f5..765381dc37 100644 --- a/util/error-report.c +++ b/util/error-report.c @@ -25,8 +25,6 @@ typedef enum { REPORT_TYPE_INFO, } report_type; -bool error_with_guestname; -const char *error_guest_name; int error_printf(const char *fmt, ...) { @@ -182,11 +180,6 @@ static void vreport(report_type type, const char *fmt, va_list ap) error_printf("%s", context); - /* Only prepend guest name if -msg guest-name and -name guest=... are set */ - if (error_with_guestname && error_guest_name && !monitor_cur()) { - error_printf("%s ", error_guest_name); - } - print_loc(); switch (type) { diff --git a/util/message.c b/util/message.c index 4c7eeb75e2..1ce3a34928 100644 --- a/util/message.c +++ b/util/message.c @@ -6,15 +6,24 @@ #include "monitor/monitor.h" static int message_format; +static char *message_workloadname; void qmessage_set_format(int flags) { message_format = flags; } + +void qmessage_set_workload_name(const char *name) +{ + message_workloadname = g_strdup(name); +} + + char *qmessage_context(int flags) { g_autofree char *timestr = NULL; + const char *wknamestr = NULL; if ((flags & QMESSAGE_CONTEXT_SKIP_MONITOR) && monitor_cur()) { @@ -26,7 +35,13 @@ char *qmessage_context(int flags) timestr = g_date_time_format_iso8601(dt); } - return g_strdup_printf("%s%s", + if (message_format & QMESSAGE_FORMAT_WORKLOAD_NAME) { + wknamestr = message_workloadname; + } + + return g_strdup_printf("%s%s%s%s", timestr ? timestr : "", - timestr ? " " : ""); + timestr ? " " : "", + wknamestr ? wknamestr : "", + wknamestr ? " " : ""); } -- 2.50.1