public inbox for qemu-rust@nongnu.org
 help / color / mirror / Atom feed
From: Markus Armbruster <armbru@redhat.com>
To: "Daniel P. Berrangé" <berrange@redhat.com>
Cc: qemu-devel@nongnu.org,
	"Manos Pitsidianakis" <manos.pitsidianakis@linaro.org>,
	"Stefan Weil" <sw@weilnetz.de>,
	"Dr. David Alan Gilbert" <dave@treblig.org>,
	"Pierrick Bouvier" <pierrick.bouvier@linaro.org>,
	devel@lists.libvirt.org,
	"Philippe Mathieu-Daudé" <philmd@linaro.org>,
	"Marc-André Lureau" <marcandre.lureau@redhat.com>,
	"Hanna Reitz" <hreitz@redhat.com>,
	"Kevin Wolf" <kwolf@redhat.com>,
	qemu-block@nongnu.org, qemu-rust@nongnu.org,
	"Paolo Bonzini" <pbonzini@redhat.com>,
	"Gerd Hoffmann" <kraxel@redhat.com>,
	"Christian Schoenebeck" <qemu_oss@crudebyte.com>,
	"Richard Henderson" <richard.henderson@linaro.org>
Subject: Re: [PATCH v6 00/27] util: sync error_report & qemu_log output more closely
Date: Thu, 26 Feb 2026 10:51:01 +0100	[thread overview]
Message-ID: <874in3hlyy.fsf@pond.sub.org> (raw)
In-Reply-To: <20260211152508.732487-1-berrange@redhat.com> ("Daniel P. Berrangé"'s message of "Wed, 11 Feb 2026 15:24:41 +0000")

Daniel P. Berrangé <berrange@redhat.com> writes:

> This series is a tangent that came out of discussion in
>
>    https://lists.nongnu.org/archive/html/qemu-devel/2025-08/msg00903.html

This was about error messages providing sufficient information both for
users and for developers.

Manos proposed to print a stack backtrace on programming errors and
fatal errors (&error_abort and &error_fatal), enabled at configure time.
He found this useful for debugging a use-after-free.

Daniel pointed out that GDB shows better stack backtraces, and that we
could not enable this feature in distro builds.  He wondered whether
showing just thread names would do.

> In thinking about adding thread info to error_report,

I understand why that can be useful for developers in certain scenarios,
but I feel it results in error reporting that is overly vebose and
unwieldy for users.  I'd prefer optional, default off.

>                                                       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.

I'm willing to accept a message format common to error reporting and log
if that's useful.  Backed by shared code, obviously.

Why could it be useful, and to whom?

Error messages are both for users and developers.  Both need them to be
clear and detailed enough to figure out what's gone wrong, and what to
do about it.

Developers can use additional detail.  Lots and lots of it at times.  No
excuse for dumping it all on users.

Carefully designed logs can also be for both.  Much of what QEMU can log
is just for developers, and that's *fine*.  Sometimes developers want to
log lots of detail per message, sometimes they don't, to keep the logs
managable, as Peter pointed out.

When the error message needs of users and developers conflict, I put
users first.

When the logging needs of users and developers conflict, I put
developers first.

> As an example of the current state, consider mixing error and
> log output today:

Having the errors in the log can clearly be useful.  The easiest way to
have them in the log is --- wait for it --- logging them.

We don't do that now.  Instead, you can log to stderr, or you can piece
together log file contents and error messages.  The format differences
can be inconvenient either way.

Could we log errors?

> - 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

I fear this is a bad idea.  I apologize for being so late with this.  I
didn't think hard enough until now.

Unified format with separate configuration controls and defaults could
be okay.

>  * -msg debug-threads=on is now unconditionally enabled
>    and thus the param is deprecated & ignored

This part just makes sense.

>  * 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.



  parent reply	other threads:[~2026-02-26  9:51 UTC|newest]

Thread overview: 59+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-02-11 15:24 [PATCH v6 00/27] util: sync error_report & qemu_log output more closely Daniel P. Berrangé
2026-02-11 15:24 ` [PATCH v6 01/27] meson: don't access 'cxx' object without checking cpp lang Daniel P. Berrangé
2026-02-11 15:24 ` [PATCH v6 02/27] qemu-options: remove extraneous [] around arg values Daniel P. Berrangé
2026-02-11 15:24 ` [PATCH v6 03/27] include: define constant for early constructor priority Daniel P. Berrangé
2026-02-18  9:22   ` Markus Armbruster
2026-02-18 10:46     ` Daniel P. Berrangé
2026-02-18 13:23       ` Markus Armbruster
2026-02-11 15:24 ` [PATCH v6 04/27] monitor: initialize global data from a constructor Daniel P. Berrangé
2026-02-11 15:24 ` [PATCH v6 05/27] system: unconditionally enable thread naming Daniel P. Berrangé
2026-02-11 15:24 ` [PATCH v6 06/27] util: fix race setting thread name on Win32 Daniel P. Berrangé
2026-02-11 15:24 ` [PATCH v6 07/27] util: expose qemu_thread_set_name Daniel P. Berrangé
2026-02-11 15:24 ` [PATCH v6 08/27] audio: make jackaudio use qemu_thread_set_name Daniel P. Berrangé
2026-02-11 15:24 ` [PATCH v6 09/27] util: set the name for the 'main' thread on Windows Daniel P. Berrangé
2026-02-11 15:24 ` [PATCH v6 10/27] util: add API to fetch the current thread name Daniel P. Berrangé
2026-02-11 15:24 ` [PATCH v6 11/27] util: introduce some API docs for logging APIs Daniel P. Berrangé
2026-02-18  9:38   ` Markus Armbruster
2026-02-11 15:24 ` [PATCH v6 12/27] util: avoid repeated prefix on incremental qemu_log calls Daniel P. Berrangé
2026-02-18  9:52   ` Markus Armbruster
2026-02-18 10:45     ` Daniel P. Berrangé
2026-02-11 15:24 ` [PATCH v6 13/27] util/log: add missing error reporting in qemu_log_trylock_with_err Daniel P. Berrangé
2026-02-18 10:45   ` Markus Armbruster
2026-02-11 15:24 ` [PATCH v6 14/27] ui: add proper error reporting for password changes Daniel P. Berrangé
2026-02-18 12:10   ` Markus Armbruster
2026-02-25 16:08     ` Daniel P. Berrangé
2026-02-11 15:24 ` [PATCH v6 15/27] ui: remove redundant use of error_printf_unless_qmp() Daniel P. Berrangé
2026-02-18 12:12   ` Markus Armbruster
2026-02-11 15:24 ` [PATCH v6 16/27] monitor: remove redundant error_[v]printf_unless_qmp Daniel P. Berrangé
2026-02-11 15:24 ` [PATCH v6 17/27] monitor: refactor error_vprintf() Daniel P. Berrangé
2026-02-11 15:24 ` [PATCH v6 18/27] monitor: move error_vprintf back to error-report.c Daniel P. Berrangé
2026-02-11 15:25 ` [PATCH v6 19/27] util: fix interleaving of error & trace output Daniel P. Berrangé
2026-02-18 12:41   ` Markus Armbruster
2026-02-18 12:45   ` Markus Armbruster
2026-02-11 15:25 ` [PATCH v6 20/27] util: don't skip error prefixes when QMP is active Daniel P. Berrangé
2026-02-18 12:47   ` Markus Armbruster
2026-02-11 15:25 ` [PATCH v6 21/27] util: fix interleaving of error prefixes Daniel P. Berrangé
2026-02-11 15:25 ` [PATCH v6 22/27] util: introduce common helper for error-report & log code Daniel P. Berrangé
2026-02-18 14:04   ` Markus Armbruster
2026-02-25 16:18     ` Daniel P. Berrangé
2026-02-25 17:51       ` Markus Armbruster
2026-02-11 15:25 ` [PATCH v6 23/27] util: convert error-report & log to message API for timestamp Daniel P. Berrangé
2026-02-11 15:25 ` [PATCH v6 24/27] util: add support for formatting a workload name in messages Daniel P. Berrangé
2026-02-11 15:25 ` [PATCH v6 25/27] util: add support for formatting a program " Daniel P. Berrangé
2026-02-19 10:08   ` Markus Armbruster
2026-02-25 16:24     ` Daniel P. Berrangé
2026-02-26  7:11       ` Markus Armbruster
2026-02-19 10:23   ` Peter Maydell
2026-02-25 16:38     ` Daniel P. Berrangé
2026-02-25 17:43       ` Peter Maydell
2026-02-25 17:47         ` Daniel P. Berrangé
2026-02-11 15:25 ` [PATCH v6 26/27] util: add support for formatting thread info " Daniel P. Berrangé
2026-02-19 10:14   ` Markus Armbruster
2026-02-25 16:33     ` Daniel P. Berrangé
2026-02-19 10:29   ` Peter Maydell
2026-02-25 16:30     ` Daniel P. Berrangé
2026-02-25 17:39       ` Peter Maydell
2026-02-11 15:25 ` [PATCH v6 27/27] util: add brackets around guest name in message context Daniel P. Berrangé
2026-02-19 10:16   ` Markus Armbruster
2026-02-26  9:51 ` Markus Armbruster [this message]
2026-02-26  9:58   ` [PATCH v6 00/27] util: sync error_report & qemu_log output more closely 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=874in3hlyy.fsf@pond.sub.org \
    --to=armbru@redhat.com \
    --cc=berrange@redhat.com \
    --cc=dave@treblig.org \
    --cc=devel@lists.libvirt.org \
    --cc=hreitz@redhat.com \
    --cc=kraxel@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=pierrick.bouvier@linaro.org \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-rust@nongnu.org \
    --cc=qemu_oss@crudebyte.com \
    --cc=richard.henderson@linaro.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