The error_report function can include the program name in any
messages it prints. The qemu_log function has no equivalent
behaviour.
This introduces support for a "program name" in the new
messages API, which will be included by default for all
binaries.
This change tweaks the output of the error_report function,
adding a space between the program name and the location
info. The qemu_log function will gain the program name. 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 -object tls-creds-x509,id=t0,dir=fish -d 'trace:qcrypto*'
qcrypto_tls_creds_x509_load TLS creds x509 load creds=0x5584e13937f0 dir=fish
qcrypto_tls_creds_get_path TLS creds path creds=0x5584e13937f0 filename=ca-cert.pem path=<none>
qemu-system-x86_64: Unable to access credentials fish/ca-cert.pem: No such file or directory
After:
# qemu-system-x86_64 -object tls-creds-x509,id=t0,dir=fish -d 'trace:qcrypto*'
qemu-system-x86_64: qcrypto_tls_creds_x509_load TLS creds x509 load creds=0x5584e13937f0 dir=fish
qemu-system-x86_64: qcrypto_tls_creds_get_path TLS creds path creds=0x5584e13937f0 filename=ca-cert.pem path=<none>
qemu-system-x86_64: Unable to access credentials fish/ca-cert.pem: No such file or directory
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
---
include/qemu/message.h | 1 +
system/vl.c | 2 +-
tests/unit/test-error-report.c | 5 +++--
util/error-report.c | 4 ----
util/message.c | 13 ++++++++++---
5 files changed, 15 insertions(+), 10 deletions(-)
diff --git a/include/qemu/message.h b/include/qemu/message.h
index 95fab69424..4550ce8ed7 100644
--- a/include/qemu/message.h
+++ b/include/qemu/message.h
@@ -6,6 +6,7 @@
enum QMessageFormatFlags {
QMESSAGE_FORMAT_TIMESTAMP = (1 << 0),
QMESSAGE_FORMAT_WORKLOAD_NAME = (1 << 1),
+ QMESSAGE_FORMAT_PROGRAM_NAME = (1 << 2),
};
/**
diff --git a/system/vl.c b/system/vl.c
index fee6fdf7b1..9030212c50 100644
--- a/system/vl.c
+++ b/system/vl.c
@@ -814,7 +814,7 @@ static void realtime_init(void)
static void configure_msg(QemuOpts *opts)
{
- int flags = 0;
+ int flags = QMESSAGE_FORMAT_PROGRAM_NAME;
if (qemu_opt_get_bool(opts, "timestamp", false)) {
flags |= QMESSAGE_FORMAT_TIMESTAMP;
}
diff --git a/tests/unit/test-error-report.c b/tests/unit/test-error-report.c
index 78f8b57660..3987a8ed25 100644
--- a/tests/unit/test-error-report.c
+++ b/tests/unit/test-error-report.c
@@ -48,7 +48,7 @@ test_error_report_loc(void)
g_test_trap_subprocess(NULL, 0, 0);
g_test_trap_assert_passed();
g_test_trap_assert_stderr("\
-test-error-report:some-file.c:7717: test error1*\
+test-error-report: some-file.c:7717: test error1*\
test-error-report: test error2*\
");
}
@@ -91,7 +91,8 @@ static void
test_error_report_timestamp(void)
{
if (g_test_subprocess()) {
- qmessage_set_format(QMESSAGE_FORMAT_TIMESTAMP);
+ qmessage_set_format(QMESSAGE_FORMAT_TIMESTAMP |
+ QMESSAGE_FORMAT_PROGRAM_NAME);
warn_report("warn");
error_report("err");
return;
diff --git a/util/error-report.c b/util/error-report.c
index 765381dc37..65262d29c4 100644
--- a/util/error-report.c
+++ b/util/error-report.c
@@ -141,10 +141,6 @@ static void print_loc(void)
int i;
const char *const *argp;
- if (!monitor_cur() && g_get_prgname()) {
- error_printf("%s:", g_get_prgname());
- sep = " ";
- }
switch (cur_loc->kind) {
case LOC_CMDLINE:
argp = cur_loc->ptr;
diff --git a/util/message.c b/util/message.c
index 1ce3a34928..f1c4f92e7b 100644
--- a/util/message.c
+++ b/util/message.c
@@ -5,7 +5,7 @@
#include "qemu/message.h"
#include "monitor/monitor.h"
-static int message_format;
+static int message_format = QMESSAGE_FORMAT_PROGRAM_NAME;
static char *message_workloadname;
void qmessage_set_format(int flags)
@@ -24,6 +24,7 @@ char *qmessage_context(int flags)
{
g_autofree char *timestr = NULL;
const char *wknamestr = NULL;
+ const char *pgnamestr = NULL;
if ((flags & QMESSAGE_CONTEXT_SKIP_MONITOR) &&
monitor_cur()) {
@@ -39,9 +40,15 @@ char *qmessage_context(int flags)
wknamestr = message_workloadname;
}
- return g_strdup_printf("%s%s%s%s",
+ if (message_format & QMESSAGE_FORMAT_PROGRAM_NAME) {
+ pgnamestr = g_get_prgname();
+ }
+
+ return g_strdup_printf("%s%s%s%s%s%s",
timestr ? timestr : "",
timestr ? " " : "",
wknamestr ? wknamestr : "",
- wknamestr ? " " : "");
+ wknamestr ? " " : "",
+ pgnamestr ? pgnamestr : "",
+ pgnamestr ? ": " : "");
}
--
2.50.1