[PATCH v4 00/23] util: sync error_report & qemu_log output more closely

Daniel P. Berrangé posted 23 patches 3 days, 4 hours ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20250925094441.1651372-1-berrange@redhat.com
Maintainers: Gerd Hoffmann <kraxel@redhat.com>, Christian Schoenebeck <qemu_oss@crudebyte.com>, Markus Armbruster <armbru@redhat.com>, Paolo Bonzini <pbonzini@redhat.com>, "Marc-André Lureau" <marcandre.lureau@redhat.com>, "Daniel P. Berrangé" <berrange@redhat.com>, "Philippe Mathieu-Daudé" <philmd@linaro.org>, "Dr. David Alan Gilbert" <dave@treblig.org>, Manos Pitsidianakis <manos.pitsidianakis@linaro.org>, Kevin Wolf <kwolf@redhat.com>, Hanna Reitz <hreitz@redhat.com>, Stefan Weil <sw@weilnetz.de>
MAINTAINERS                          |  2 +
audio/jackaudio.c                    | 30 +++++++--
docs/about/deprecated.rst            |  7 ++
include/monitor/monitor.h            |  4 +-
include/qemu/compiler.h              |  8 +++
include/qemu/error-report.h          |  4 --
include/qemu/log-for-trace.h         | 35 +++++++++-
include/qemu/log.h                   | 26 ++++++++
include/qemu/message.h               | 40 ++++++++++++
include/qemu/thread.h                |  3 +-
meson.build                          | 21 ++++++
monitor/monitor.c                    | 61 ++++++-----------
rust/util/src/log.rs                 |  7 ++
storage-daemon/qemu-storage-daemon.c |  6 ++
stubs/error-printf.c                 | 23 -------
stubs/meson.build                    |  1 -
stubs/monitor-core.c                 | 20 +++++-
system/vl.c                          | 31 ++++++---
tests/qemu-iotests/041               |  2 +-
tests/qemu-iotests/common.filter     |  2 +-
tests/unit/test-error-report.c       |  6 +-
tests/unit/test-util-sockets.c       |  1 +
ui/vnc.c                             | 14 ++--
util/error-report.c                  | 97 +++++++++++++++++-----------
util/log.c                           | 28 ++++----
util/meson.build                     |  1 +
util/message.c                       | 47 ++++++++++++++
util/qemu-thread-posix.c             | 77 +++++++++++++++-------
util/qemu-thread-win32.c             | 87 +++++++++++++++++--------
29 files changed, 485 insertions(+), 206 deletions(-)
create mode 100644 include/qemu/message.h
delete mode 100644 stubs/error-printf.c
create mode 100644 util/message.c
[PATCH v4 00/23] util: sync error_report & qemu_log output more closely
Posted by Daniel P. Berrangé 3 days, 4 hours ago
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 v4:

 - Re-architected the way error_vprintf() operates
   to simplify monitor dependency
 - Fixed the move of error_vprintf from monitor.c
   to error-report.c so that unit tests can still
   get a stub to capture messages to g_test_message
 - Simplify changes to vreport() to avoid passing
   around function pointers
 - Add locking of stderr to vreport() to serialize
   incremental output
 - Fix thread naming logic changes on Windows
 - Change deprecation warning messages

Changes in v3:

 - Stop formatting a string in qmessage_context, instead
   output directly to a "FILE *" stream
 - Fix pre-existing bug interleaving qemu_log and
   vreport when the trace 'log' backend has mutex probes
   enabled

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é (23):
  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 repeated prefix on incremental qemu_log calls
  util: introduce some API docs for logging APIs
  ui/vnc: remove use of error_printf_unless_qmp()
  monitor: remove redundant error_[v]printf_unless_qmp
  monitor: refactor error_vprintf()
  monitor: move error_vprintf back to error-report.c
  monitor: introduce monitor_cur_is_hmp() helper
  util: don't skip error prefixes when QMP is active
  util: fix interleaving of error & trace output
  util: fix interleaving of error prefixes
  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                    | 30 +++++++--
 docs/about/deprecated.rst            |  7 ++
 include/monitor/monitor.h            |  4 +-
 include/qemu/compiler.h              |  8 +++
 include/qemu/error-report.h          |  4 --
 include/qemu/log-for-trace.h         | 35 +++++++++-
 include/qemu/log.h                   | 26 ++++++++
 include/qemu/message.h               | 40 ++++++++++++
 include/qemu/thread.h                |  3 +-
 meson.build                          | 21 ++++++
 monitor/monitor.c                    | 61 ++++++-----------
 rust/util/src/log.rs                 |  7 ++
 storage-daemon/qemu-storage-daemon.c |  6 ++
 stubs/error-printf.c                 | 23 -------
 stubs/meson.build                    |  1 -
 stubs/monitor-core.c                 | 20 +++++-
 system/vl.c                          | 31 ++++++---
 tests/qemu-iotests/041               |  2 +-
 tests/qemu-iotests/common.filter     |  2 +-
 tests/unit/test-error-report.c       |  6 +-
 tests/unit/test-util-sockets.c       |  1 +
 ui/vnc.c                             | 14 ++--
 util/error-report.c                  | 97 +++++++++++++++++-----------
 util/log.c                           | 28 ++++----
 util/meson.build                     |  1 +
 util/message.c                       | 47 ++++++++++++++
 util/qemu-thread-posix.c             | 77 +++++++++++++++-------
 util/qemu-thread-win32.c             | 87 +++++++++++++++++--------
 29 files changed, 485 insertions(+), 206 deletions(-)
 create mode 100644 include/qemu/message.h
 delete mode 100644 stubs/error-printf.c
 create mode 100644 util/message.c

-- 
2.50.1


Re: [PATCH v4 00/23] util: sync error_report & qemu_log output more closely
Posted by Philippe Mathieu-Daudé 3 days, 3 hours ago
Hi Daniel,

On 25/9/25 11:44, Daniel P. Berrangé wrote:
> 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.

Testing with this change on top ...:

-- >8 --
diff --git a/include/qemu/message.h b/include/qemu/message.h
index 2cc092c993b..97fd2a94fbd 100644
--- a/include/qemu/message.h
+++ b/include/qemu/message.h
@@ -10,2 +10,3 @@ enum QMessageFormatFlags {
      QMESSAGE_FORMAT_THREAD_INFO = (1 << 3),
+    QMESSAGE_FORMAT_VCPU_ID = (1 << 4),
  };
diff --git a/system/vl.c b/system/vl.c
index bf9f80491f2..2f43a075be9 100644
--- a/system/vl.c
+++ b/system/vl.c
@@ -149,3 +149,4 @@
      (QMESSAGE_FORMAT_PROGRAM_NAME | \
-     QMESSAGE_FORMAT_THREAD_INFO)
+     QMESSAGE_FORMAT_THREAD_INFO | \
+     QMESSAGE_FORMAT_VCPU_ID)

diff --git a/util/message.c b/util/message.c
index 7d94b9d970d..19d1331403a 100644
--- a/util/message.c
+++ b/util/message.c
@@ -6,2 +6,3 @@
  #include "monitor/monitor.h"
+#include "hw/core/cpu.h"

@@ -46,2 +47,8 @@ void qmessage_context_print(FILE *fp)
      }
+
+    if (message_format & QMESSAGE_FORMAT_VCPU_ID) {
+        if (current_cpu) {
+            fprintf(fp, "(cpuid:%d): ", current_cpu->cpu_index);
+        }
+    }
  }
---

... on a branch where I test heavy vcpu context switching.

When using tracing + stderr AND the stdio console, I sometimes get
the trace events to disappear at some point. Not sure why (or if related
to my branch) yet.

When redirecting traces to a file ('-D foo.log'), all traces are
collected (no hang).

In both cases I notice a high performance slow down (when tracing is
used).

Suspicions:
- flocking
- new formatting

Regards,

Phil.

Re: [PATCH v4 00/23] util: sync error_report & qemu_log output more closely
Posted by Daniel P. Berrangé 3 days, 3 hours ago
On Thu, Sep 25, 2025 at 12:22:39PM +0200, Philippe Mathieu-Daudé wrote:
> Hi Daniel,
> 
> On 25/9/25 11:44, Daniel P. Berrangé wrote:
> > 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.
> 
> Testing with this change on top ...:
> 
> -- >8 --
> diff --git a/include/qemu/message.h b/include/qemu/message.h
> index 2cc092c993b..97fd2a94fbd 100644
> --- a/include/qemu/message.h
> +++ b/include/qemu/message.h
> @@ -10,2 +10,3 @@ enum QMessageFormatFlags {
>      QMESSAGE_FORMAT_THREAD_INFO = (1 << 3),
> +    QMESSAGE_FORMAT_VCPU_ID = (1 << 4),
>  };
> diff --git a/system/vl.c b/system/vl.c
> index bf9f80491f2..2f43a075be9 100644
> --- a/system/vl.c
> +++ b/system/vl.c
> @@ -149,3 +149,4 @@
>      (QMESSAGE_FORMAT_PROGRAM_NAME | \
> -     QMESSAGE_FORMAT_THREAD_INFO)
> +     QMESSAGE_FORMAT_THREAD_INFO | \
> +     QMESSAGE_FORMAT_VCPU_ID)
> 
> diff --git a/util/message.c b/util/message.c
> index 7d94b9d970d..19d1331403a 100644
> --- a/util/message.c
> +++ b/util/message.c
> @@ -6,2 +6,3 @@
>  #include "monitor/monitor.h"
> +#include "hw/core/cpu.h"
> 
> @@ -46,2 +47,8 @@ void qmessage_context_print(FILE *fp)
>      }
> +
> +    if (message_format & QMESSAGE_FORMAT_VCPU_ID) {
> +        if (current_cpu) {
> +            fprintf(fp, "(cpuid:%d): ", current_cpu->cpu_index);
> +        }
> +    }
>  }
> ---
> 
> ... on a branch where I test heavy vcpu context switching.
> 
> When using tracing + stderr AND the stdio console, I sometimes get
> the trace events to disappear at some point. Not sure why (or if related
> to my branch) yet.
> 
> When redirecting traces to a file ('-D foo.log'), all traces are
> collected (no hang).
> 
> In both cases I notice a high performance slow down (when tracing is
> used).
> 
> Suspicions:
> - flocking

The logging code (and thus tracing) already used flockfile in
qemu_log, so that should not be new. Only error_report gained
new flockfile calls in this series.

> - new formatting

Seems the more likely option.  If practical, a git bisect across the
series should show which part introduced any slowdown.

Assuming you've not given any -msg option to QEMU though, the finger
probably points towards the thread name code, as the bit that is
new and enabled by default.

With regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|


Re: [PATCH v4 00/23] util: sync error_report & qemu_log output more closely
Posted by Philippe Mathieu-Daudé 3 days, 2 hours ago
On 25/9/25 12:31, Daniel P. Berrangé wrote:
> On Thu, Sep 25, 2025 at 12:22:39PM +0200, Philippe Mathieu-Daudé wrote:
>> Hi Daniel,
>>
>> On 25/9/25 11:44, Daniel P. Berrangé wrote:
>>> 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.


>>> 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.
>>
>> Testing with this change on top ...:
>>
>> -- >8 --
>> diff --git a/include/qemu/message.h b/include/qemu/message.h
>> index 2cc092c993b..97fd2a94fbd 100644
>> --- a/include/qemu/message.h
>> +++ b/include/qemu/message.h
>> @@ -10,2 +10,3 @@ enum QMessageFormatFlags {
>>       QMESSAGE_FORMAT_THREAD_INFO = (1 << 3),
>> +    QMESSAGE_FORMAT_VCPU_ID = (1 << 4),
>>   };
>> diff --git a/system/vl.c b/system/vl.c
>> index bf9f80491f2..2f43a075be9 100644
>> --- a/system/vl.c
>> +++ b/system/vl.c
>> @@ -149,3 +149,4 @@
>>       (QMESSAGE_FORMAT_PROGRAM_NAME | \
>> -     QMESSAGE_FORMAT_THREAD_INFO)
>> +     QMESSAGE_FORMAT_THREAD_INFO | \
>> +     QMESSAGE_FORMAT_VCPU_ID)
>>
>> diff --git a/util/message.c b/util/message.c
>> index 7d94b9d970d..19d1331403a 100644
>> --- a/util/message.c
>> +++ b/util/message.c
>> @@ -6,2 +6,3 @@
>>   #include "monitor/monitor.h"
>> +#include "hw/core/cpu.h"
>>
>> @@ -46,2 +47,8 @@ void qmessage_context_print(FILE *fp)
>>       }
>> +
>> +    if (message_format & QMESSAGE_FORMAT_VCPU_ID) {
>> +        if (current_cpu) {
>> +            fprintf(fp, "(cpuid:%d): ", current_cpu->cpu_index);
>> +        }
>> +    }
>>   }
>> ---
>>
>> ... on a branch where I test heavy vcpu context switching.
>>
>> When using tracing + stderr AND the stdio console, I sometimes get
>> the trace events to disappear at some point. Not sure why (or if related
>> to my branch) yet.
>>
>> When redirecting traces to a file ('-D foo.log'), all traces are
>> collected (no hang).
>>
>> In both cases I notice a high performance slow down (when tracing is
>> used).
>>
>> Suspicions:
>> - flocking
> 
> The logging code (and thus tracing) already used flockfile in
> qemu_log, so that should not be new. Only error_report gained
> new flockfile calls in this series.
> 
>> - new formatting
> 
> Seems the more likely option.  If practical, a git bisect across the
> series should show which part introduced any slowdown.

This is planned.

> Assuming you've not given any -msg option to QEMU though, the finger

Indeed.

> probably points towards the thread name code, as the bit that is
> new and enabled by default.

I thought about that then noticed the thread name is const (preformatted
once in each qemu_thread_get_name() implementation).

> 
> With regards,
> Daniel