qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Daniel P. Berrangé" <berrange@redhat.com>
To: qemu-devel@nongnu.org
Cc: "Manos Pitsidianakis" <manos.pitsidianakis@linaro.org>,
	"Hanna Reitz" <hreitz@redhat.com>,
	"Marc-André Lureau" <marcandre.lureau@redhat.com>,
	"Kevin Wolf" <kwolf@redhat.com>,
	"Philippe Mathieu-Daudé" <philmd@linaro.org>,
	"Dr. David Alan Gilbert" <dave@treblig.org>,
	devel@lists.libvirt.org, "Stefan Weil" <sw@weilnetz.de>,
	qemu-block@nongnu.org, "Paolo Bonzini" <pbonzini@redhat.com>,
	"Markus Armbruster" <armbru@redhat.com>,
	"Daniel P. Berrangé" <berrange@redhat.com>
Subject: [PATCH 07/12] util: introduce common helper for error-report & log code
Date: Tue, 19 Aug 2025 21:27:03 +0100	[thread overview]
Message-ID: <20250819202708.1185594-8-berrange@redhat.com> (raw)
In-Reply-To: <20250819202708.1185594-1-berrange@redhat.com>

The error-report and log code both have a need to add prefixes
to messages they are printing, with the current example being
a timestamp.

The format and configuration they use should be consistent, so
providing a common helper will ensure this is always the case.
Initially the helper only emits a timestamp, but future patches
will expand this.

This takes the liberty of assigning the new file to the same
maintainer as the existing error-report.c file, given it will
be extracting some functionality from the latter.

Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
---
 MAINTAINERS            |  2 ++
 include/qemu/message.h | 40 ++++++++++++++++++++++++++++++++++++++++
 util/meson.build       |  1 +
 util/message.c         | 32 ++++++++++++++++++++++++++++++++
 4 files changed, 75 insertions(+)
 create mode 100644 include/qemu/message.h
 create mode 100644 util/message.c

diff --git a/MAINTAINERS b/MAINTAINERS
index a07086ed76..3cc6c0b409 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -3169,9 +3169,11 @@ M: Markus Armbruster <armbru@redhat.com>
 S: Supported
 F: include/qapi/error.h
 F: include/qemu/error-report.h
+F: include/qemu/message.h
 F: qapi/error.json
 F: util/error.c
 F: util/error-report.c
+F: util/message.c
 F: scripts/coccinelle/err-bad-newline.cocci
 F: scripts/coccinelle/error-use-after-free.cocci
 F: scripts/coccinelle/error_propagate_null.cocci
diff --git a/include/qemu/message.h b/include/qemu/message.h
new file mode 100644
index 0000000000..160bee8417
--- /dev/null
+++ b/include/qemu/message.h
@@ -0,0 +1,40 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+#ifndef QEMU_MESSAGE_H
+#define QEMU_MESSAGE_H
+
+enum QMessageFormatFlags {
+    QMESSAGE_FORMAT_TIMESTAMP = (1 << 0),
+};
+
+/*
+ * qmessage_set_format:
+ * @flags: the message information to emit
+ *
+ * Select which pieces of information to
+ * emit for messages
+ */
+void qmessage_set_format(int flags);
+
+enum QMessageContextFlags {
+    QMESSAGE_CONTEXT_SKIP_MONITOR = (1 << 0),
+};
+
+/*
+ * qmessage_context:
+ * @flags: the message formatting control flags
+ *
+ * Format a message prefix with the information
+ * previously selected by a call to
+ * qmessage_set_format.
+ *
+ * If @flags contains QMESSAGE_CONTEXT_SKIP_MONITOR
+ * an empty string will be returned if running in
+ * the context of a HMP command
+ *
+ * Returns: a formatted message prefix, or empty string;
+ * to be freed by the caller.
+ */
+char *qmessage_context(int flags);
+
+#endif /* QEMU_MESSAGE_H */
diff --git a/util/meson.build b/util/meson.build
index 35029380a3..f5365e3b4f 100644
--- a/util/meson.build
+++ b/util/meson.build
@@ -40,6 +40,7 @@ util_ss.add(files('host-utils.c'))
 util_ss.add(files('bitmap.c', 'bitops.c'))
 util_ss.add(files('fifo8.c'))
 util_ss.add(files('cacheflush.c'))
+util_ss.add(files('message.c'))
 util_ss.add(files('error.c', 'error-report.c'))
 util_ss.add(files('qemu-print.c'))
 util_ss.add(files('id.c'))
diff --git a/util/message.c b/util/message.c
new file mode 100644
index 0000000000..4c7eeb75e2
--- /dev/null
+++ b/util/message.c
@@ -0,0 +1,32 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+#include "qemu/osdep.h"
+
+#include "qemu/message.h"
+#include "monitor/monitor.h"
+
+static int message_format;
+
+void qmessage_set_format(int flags)
+{
+    message_format = flags;
+}
+
+char *qmessage_context(int flags)
+{
+    g_autofree char *timestr = NULL;
+
+    if ((flags & QMESSAGE_CONTEXT_SKIP_MONITOR) &&
+        monitor_cur()) {
+        return g_strdup("");
+    }
+
+    if (message_format & QMESSAGE_FORMAT_TIMESTAMP) {
+        g_autoptr(GDateTime) dt = g_date_time_new_now_utc();
+        timestr = g_date_time_format_iso8601(dt);
+    }
+
+    return g_strdup_printf("%s%s",
+                           timestr ? timestr : "",
+                           timestr ? " " : "");
+}
-- 
2.50.1



  parent reply	other threads:[~2025-08-19 20:28 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-08-19 20:26 [PATCH 00/12] util: sync error_report & qemu_log output more closely Daniel P. Berrangé
2025-08-19 20:26 ` [PATCH 01/12] include: define constant for early constructor priority Daniel P. Berrangé
2025-08-19 20:26 ` [PATCH 02/12] monitor: initialize global data from a constructor Daniel P. Berrangé
2025-08-19 20:26 ` [PATCH 03/12] system: unconditionally enable thread naming Daniel P. Berrangé
2025-08-19 22:00   ` Dr. David Alan Gilbert
2025-08-19 20:27 ` [PATCH 04/12] util: set the name for the 'main' thread Daniel P. Berrangé
2025-08-19 23:18   ` Dr. David Alan Gilbert
2025-08-20 10:29     ` Daniel P. Berrangé
2025-08-19 20:27 ` [PATCH 05/12] util: add API to fetch the current thread id Daniel P. Berrangé
2025-08-19 21:38   ` Richard Henderson
2025-08-19 23:35   ` Dr. David Alan Gilbert
2025-08-20 10:47     ` Daniel P. Berrangé
2025-08-19 20:27 ` [PATCH 06/12] util: add API to fetch the current thread name Daniel P. Berrangé
2025-08-19 21:50   ` Richard Henderson
2025-08-20 10:50     ` Daniel P. Berrangé
2025-08-19 20:27 ` Daniel P. Berrangé [this message]
2025-08-19 21:57   ` [PATCH 07/12] util: introduce common helper for error-report & log code Richard Henderson
2025-08-20 11:00     ` Daniel P. Berrangé
2025-08-19 20:27 ` [PATCH 08/12] util: convert error-report & log to message API for timestamp Daniel P. Berrangé
2025-08-19 22:02   ` Richard Henderson
2025-08-20 11:12     ` Daniel P. Berrangé
2025-08-29 18:07     ` Daniel P. Berrangé
2025-08-19 20:27 ` [PATCH 09/12] util: add support for formatting a workload name in messages Daniel P. Berrangé
2025-08-19 20:27 ` [PATCH 10/12] util: add support for formatting a program " Daniel P. Berrangé
2025-08-19 20:27 ` [PATCH 11/12] util: add support for formatting thread info " Daniel P. Berrangé
2025-08-19 20:27 ` [PATCH 12/12] util: add brackets around guest name in message context Daniel P. Berrangé

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20250819202708.1185594-8-berrange@redhat.com \
    --to=berrange@redhat.com \
    --cc=armbru@redhat.com \
    --cc=dave@treblig.org \
    --cc=devel@lists.libvirt.org \
    --cc=hreitz@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=manos.pitsidianakis@linaro.org \
    --cc=marcandre.lureau@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=philmd@linaro.org \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=sw@weilnetz.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).