* [PATCH 0/3] char: add option to inject timestamps into logfile
@ 2025-11-28 20:05 Vladimir Sementsov-Ogievskiy
2025-11-28 20:05 ` [RFC PATCH 1/3] char: qemu_chr_write_log() use qemu_write_full() Vladimir Sementsov-Ogievskiy
` (2 more replies)
0 siblings, 3 replies; 9+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2025-11-28 20:05 UTC (permalink / raw)
To: marcandre.lureau
Cc: pbonzini, armbru, eblake, berrange, vsementsov, yc-core,
d-tatianin, qemu-devel
Hi all!
The ability to correlate the QEMU log and the guest log can be useful
for investigating problems. So, I suggest an option to inject timestimps
into logfile while writing it.
[sorry for resending, I forget to add qemu-devel on first try :(]
Vladimir Sementsov-Ogievskiy (3):
char: qemu_chr_write_log() use qemu_write_full()
error-report: move real_time_iso8601() to header
chardev: add logtimestamp option
chardev/char.c | 73 +++++++++++++++++++++++++++++--------
include/chardev/char.h | 2 +
include/qemu/error-report.h | 6 +++
qapi/char.json | 6 ++-
util/error-report.c | 7 ----
5 files changed, 70 insertions(+), 24 deletions(-)
--
2.48.1
^ permalink raw reply [flat|nested] 9+ messages in thread* [RFC PATCH 1/3] char: qemu_chr_write_log() use qemu_write_full() 2025-11-28 20:05 [PATCH 0/3] char: add option to inject timestamps into logfile Vladimir Sementsov-Ogievskiy @ 2025-11-28 20:05 ` Vladimir Sementsov-Ogievskiy 2025-11-28 20:05 ` [PATCH 2/3] error-report: move real_time_iso8601() to header Vladimir Sementsov-Ogievskiy 2025-11-28 20:05 ` [PATCH 3/3] chardev: add logtimestamp option Vladimir Sementsov-Ogievskiy 2 siblings, 0 replies; 9+ messages in thread From: Vladimir Sementsov-Ogievskiy @ 2025-11-28 20:05 UTC (permalink / raw) To: marcandre.lureau Cc: pbonzini, armbru, eblake, berrange, vsementsov, yc-core, d-tatianin, qemu-devel logfd is blocking, so we don't need to care about EAGAIN. Let's simply use qemu_write_full(). Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru> --- Honestly, I'm not sure, may be EAGAIN handling is needed for some non-linux OSes? That's why it's RFC.. The original commit 0d7708ba29cbcc34336 "qemu-char: add logfile facility to all chardev backends" doen't mention, why should we handle EAGAIN. chardev/char.c | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/chardev/char.c b/chardev/char.c index 3e432195a5..64006a3119 100644 --- a/chardev/char.c +++ b/chardev/char.c @@ -82,29 +82,17 @@ void qemu_chr_be_event(Chardev *s, QEMUChrEvent event) CHARDEV_GET_CLASS(s)->chr_be_event(s, event); } -/* Not reporting errors from writing to logfile, as logs are - * defined to be "best effort" only */ static void qemu_chr_write_log(Chardev *s, const uint8_t *buf, size_t len) { - size_t done = 0; - ssize_t ret; - if (s->logfd < 0) { return; } - while (done < len) { - retry: - ret = write(s->logfd, buf + done, len - done); - if (ret == -1 && errno == EAGAIN) { - g_usleep(100); - goto retry; - } - - if (ret <= 0) { - return; - } - done += ret; + if (qemu_write_full(s->logfd, buf, len) < len) { + /* + * qemu_write_full() is defined with G_GNUC_WARN_UNUSED_RESULT, + * but logging is best‑effort, we do ignore errors. + */ } } -- 2.48.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 2/3] error-report: move real_time_iso8601() to header 2025-11-28 20:05 [PATCH 0/3] char: add option to inject timestamps into logfile Vladimir Sementsov-Ogievskiy 2025-11-28 20:05 ` [RFC PATCH 1/3] char: qemu_chr_write_log() use qemu_write_full() Vladimir Sementsov-Ogievskiy @ 2025-11-28 20:05 ` Vladimir Sementsov-Ogievskiy 2025-12-03 14:16 ` Markus Armbruster 2025-11-28 20:05 ` [PATCH 3/3] chardev: add logtimestamp option Vladimir Sementsov-Ogievskiy 2 siblings, 1 reply; 9+ messages in thread From: Vladimir Sementsov-Ogievskiy @ 2025-11-28 20:05 UTC (permalink / raw) To: marcandre.lureau Cc: pbonzini, armbru, eblake, berrange, vsementsov, yc-core, d-tatianin, qemu-devel To be reused in the following commit. Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru> --- include/qemu/error-report.h | 6 ++++++ util/error-report.c | 7 ------- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/include/qemu/error-report.h b/include/qemu/error-report.h index 3ae2357fda..412b705898 100644 --- a/include/qemu/error-report.h +++ b/include/qemu/error-report.h @@ -74,4 +74,10 @@ extern bool message_with_timestamp; extern bool error_with_guestname; extern const char *error_guest_name; +static inline char *real_time_iso8601(void) +{ + g_autoptr(GDateTime) dt = g_date_time_new_now_utc(); + return g_date_time_format_iso8601(dt); +} + #endif diff --git a/util/error-report.c b/util/error-report.c index 1b17c11de1..20618640e8 100644 --- a/util/error-report.c +++ b/util/error-report.c @@ -169,13 +169,6 @@ static void print_loc(void) } } -static char * -real_time_iso8601(void) -{ - g_autoptr(GDateTime) dt = g_date_time_new_now_utc(); - return g_date_time_format_iso8601(dt); -} - /* * Print a message to current monitor if we have one, else to stderr. * @report_type is the type of message: error, warning or informational. -- 2.48.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 2/3] error-report: move real_time_iso8601() to header 2025-11-28 20:05 ` [PATCH 2/3] error-report: move real_time_iso8601() to header Vladimir Sementsov-Ogievskiy @ 2025-12-03 14:16 ` Markus Armbruster 2025-12-03 15:05 ` Vladimir Sementsov-Ogievskiy 0 siblings, 1 reply; 9+ messages in thread From: Markus Armbruster @ 2025-12-03 14:16 UTC (permalink / raw) To: Vladimir Sementsov-Ogievskiy Cc: marcandre.lureau, pbonzini, eblake, berrange, yc-core, d-tatianin, qemu-devel Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru> writes: > To be reused in the following commit. > > Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru> > --- > include/qemu/error-report.h | 6 ++++++ > util/error-report.c | 7 ------- > 2 files changed, 6 insertions(+), 7 deletions(-) > > diff --git a/include/qemu/error-report.h b/include/qemu/error-report.h > index 3ae2357fda..412b705898 100644 > --- a/include/qemu/error-report.h > +++ b/include/qemu/error-report.h > @@ -74,4 +74,10 @@ extern bool message_with_timestamp; > extern bool error_with_guestname; > extern const char *error_guest_name; > > +static inline char *real_time_iso8601(void) > +{ > + g_autoptr(GDateTime) dt = g_date_time_new_now_utc(); > + return g_date_time_format_iso8601(dt); > +} > + > #endif Reasons for inline? Because the function is so small? > diff --git a/util/error-report.c b/util/error-report.c > index 1b17c11de1..20618640e8 100644 > --- a/util/error-report.c > +++ b/util/error-report.c > @@ -169,13 +169,6 @@ static void print_loc(void) > } > } > > -static char * > -real_time_iso8601(void) > -{ > - g_autoptr(GDateTime) dt = g_date_time_new_now_utc(); > - return g_date_time_format_iso8601(dt); > -} > - > /* > * Print a message to current monitor if we have one, else to stderr. > * @report_type is the type of message: error, warning or informational. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/3] error-report: move real_time_iso8601() to header 2025-12-03 14:16 ` Markus Armbruster @ 2025-12-03 15:05 ` Vladimir Sementsov-Ogievskiy 2025-12-04 8:12 ` Markus Armbruster 0 siblings, 1 reply; 9+ messages in thread From: Vladimir Sementsov-Ogievskiy @ 2025-12-03 15:05 UTC (permalink / raw) To: Markus Armbruster Cc: marcandre.lureau, pbonzini, eblake, berrange, yc-core, d-tatianin, qemu-devel On 03.12.25 17:16, Markus Armbruster wrote: > Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru> writes: > >> To be reused in the following commit. >> >> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru> >> --- >> include/qemu/error-report.h | 6 ++++++ >> util/error-report.c | 7 ------- >> 2 files changed, 6 insertions(+), 7 deletions(-) >> >> diff --git a/include/qemu/error-report.h b/include/qemu/error-report.h >> index 3ae2357fda..412b705898 100644 >> --- a/include/qemu/error-report.h >> +++ b/include/qemu/error-report.h >> @@ -74,4 +74,10 @@ extern bool message_with_timestamp; >> extern bool error_with_guestname; >> extern const char *error_guest_name; >> >> +static inline char *real_time_iso8601(void) >> +{ >> + g_autoptr(GDateTime) dt = g_date_time_new_now_utc(); >> + return g_date_time_format_iso8601(dt); >> +} >> + >> #endif > > Reasons for inline? Because the function is so small? Yes, seems, just this. > >> diff --git a/util/error-report.c b/util/error-report.c >> index 1b17c11de1..20618640e8 100644 >> --- a/util/error-report.c >> +++ b/util/error-report.c >> @@ -169,13 +169,6 @@ static void print_loc(void) >> } >> } >> >> -static char * >> -real_time_iso8601(void) >> -{ >> - g_autoptr(GDateTime) dt = g_date_time_new_now_utc(); >> - return g_date_time_format_iso8601(dt); >> -} >> - >> /* >> * Print a message to current monitor if we have one, else to stderr. >> * @report_type is the type of message: error, warning or informational. > -- Best regards, Vladimir ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/3] error-report: move real_time_iso8601() to header 2025-12-03 15:05 ` Vladimir Sementsov-Ogievskiy @ 2025-12-04 8:12 ` Markus Armbruster 2025-12-04 8:30 ` Philippe Mathieu-Daudé 0 siblings, 1 reply; 9+ messages in thread From: Markus Armbruster @ 2025-12-04 8:12 UTC (permalink / raw) To: Vladimir Sementsov-Ogievskiy Cc: Markus Armbruster, marcandre.lureau, pbonzini, eblake, berrange, yc-core, d-tatianin, qemu-devel Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru> writes: > On 03.12.25 17:16, Markus Armbruster wrote: >> Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru> writes: >> >>> To be reused in the following commit. >>> >>> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru> >>> --- >>> include/qemu/error-report.h | 6 ++++++ >>> util/error-report.c | 7 ------- >>> 2 files changed, 6 insertions(+), 7 deletions(-) >>> >>> diff --git a/include/qemu/error-report.h b/include/qemu/error-report.h >>> index 3ae2357fda..412b705898 100644 >>> --- a/include/qemu/error-report.h >>> +++ b/include/qemu/error-report.h >>> @@ -74,4 +74,10 @@ extern bool message_with_timestamp; >>> extern bool error_with_guestname; >>> extern const char *error_guest_name; >>> >>> +static inline char *real_time_iso8601(void) >>> +{ >>> + g_autoptr(GDateTime) dt = g_date_time_new_now_utc(); >>> + return g_date_time_format_iso8601(dt); >>> +} >>> + >>> #endif >> >> Reasons for inline? Because the function is so small? > > Yes, seems, just this. I'd prefer not to. Actually, I'd be tempted to just duplicate the two calls and call it a day. Up to you. >>> diff --git a/util/error-report.c b/util/error-report.c >>> index 1b17c11de1..20618640e8 100644 >>> --- a/util/error-report.c >>> +++ b/util/error-report.c >>> @@ -169,13 +169,6 @@ static void print_loc(void) >>> } >>> } >>> >>> -static char * >>> -real_time_iso8601(void) >>> -{ >>> - g_autoptr(GDateTime) dt = g_date_time_new_now_utc(); >>> - return g_date_time_format_iso8601(dt); >>> -} >>> - >>> /* >>> * Print a message to current monitor if we have one, else to stderr. >>> * @report_type is the type of message: error, warning or informational. >> ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/3] error-report: move real_time_iso8601() to header 2025-12-04 8:12 ` Markus Armbruster @ 2025-12-04 8:30 ` Philippe Mathieu-Daudé 2025-12-04 12:54 ` Vladimir Sementsov-Ogievskiy 0 siblings, 1 reply; 9+ messages in thread From: Philippe Mathieu-Daudé @ 2025-12-04 8:30 UTC (permalink / raw) To: Markus Armbruster, Vladimir Sementsov-Ogievskiy Cc: marcandre.lureau, pbonzini, eblake, berrange, yc-core, d-tatianin, qemu-devel Hi, On 4/12/25 09:12, Markus Armbruster wrote: > Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru> writes: > >> On 03.12.25 17:16, Markus Armbruster wrote: >>> Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru> writes: >>> >>>> To be reused in the following commit. >>>> >>>> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru> >>>> --- >>>> include/qemu/error-report.h | 6 ++++++ >>>> util/error-report.c | 7 ------- >>>> 2 files changed, 6 insertions(+), 7 deletions(-) >>>> >>>> diff --git a/include/qemu/error-report.h b/include/qemu/error-report.h >>>> index 3ae2357fda..412b705898 100644 >>>> --- a/include/qemu/error-report.h >>>> +++ b/include/qemu/error-report.h >>>> @@ -74,4 +74,10 @@ extern bool message_with_timestamp; >>>> extern bool error_with_guestname; >>>> extern const char *error_guest_name; >>>> >>>> +static inline char *real_time_iso8601(void) >>>> +{ >>>> + g_autoptr(GDateTime) dt = g_date_time_new_now_utc(); >>>> + return g_date_time_format_iso8601(dt); >>>> +} >>>> + >>>> #endif >>> >>> Reasons for inline? Because the function is so small? >> >> Yes, seems, just this. > > I'd prefer not to. > > Actually, I'd be tempted to just duplicate the two calls and call it a > day. Up to you. We now prefer to let the toolchain LTO do its clever job. Better avoid duplication. To enforce this style, lets expose the declaration with a @docstring, and keep the definition in util/. My 2 cents. > >>>> diff --git a/util/error-report.c b/util/error-report.c >>>> index 1b17c11de1..20618640e8 100644 >>>> --- a/util/error-report.c >>>> +++ b/util/error-report.c >>>> @@ -169,13 +169,6 @@ static void print_loc(void) >>>> } >>>> } >>>> >>>> -static char * >>>> -real_time_iso8601(void) >>>> -{ >>>> - g_autoptr(GDateTime) dt = g_date_time_new_now_utc(); >>>> - return g_date_time_format_iso8601(dt); >>>> -} ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/3] error-report: move real_time_iso8601() to header 2025-12-04 8:30 ` Philippe Mathieu-Daudé @ 2025-12-04 12:54 ` Vladimir Sementsov-Ogievskiy 0 siblings, 0 replies; 9+ messages in thread From: Vladimir Sementsov-Ogievskiy @ 2025-12-04 12:54 UTC (permalink / raw) To: Philippe Mathieu-Daudé, Markus Armbruster Cc: marcandre.lureau, pbonzini, eblake, berrange, yc-core, d-tatianin, qemu-devel On 04.12.25 11:30, Philippe Mathieu-Daudé wrote: > Hi, > > On 4/12/25 09:12, Markus Armbruster wrote: >> Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru> writes: >> >>> On 03.12.25 17:16, Markus Armbruster wrote: >>>> Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru> writes: >>>> >>>>> To be reused in the following commit. >>>>> >>>>> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru> >>>>> --- >>>>> include/qemu/error-report.h | 6 ++++++ >>>>> util/error-report.c | 7 ------- >>>>> 2 files changed, 6 insertions(+), 7 deletions(-) >>>>> >>>>> diff --git a/include/qemu/error-report.h b/include/qemu/error-report.h >>>>> index 3ae2357fda..412b705898 100644 >>>>> --- a/include/qemu/error-report.h >>>>> +++ b/include/qemu/error-report.h >>>>> @@ -74,4 +74,10 @@ extern bool message_with_timestamp; >>>>> extern bool error_with_guestname; >>>>> extern const char *error_guest_name; >>>>> +static inline char *real_time_iso8601(void) >>>>> +{ >>>>> + g_autoptr(GDateTime) dt = g_date_time_new_now_utc(); >>>>> + return g_date_time_format_iso8601(dt); >>>>> +} >>>>> + >>>>> #endif >>>> >>>> Reasons for inline? Because the function is so small? >>> >>> Yes, seems, just this. >> >> I'd prefer not to. >> >> Actually, I'd be tempted to just duplicate the two calls and call it a >> day. Up to you. > > We now prefer to let the toolchain LTO do its clever job. > Better avoid duplication. To enforce this style, lets expose > the declaration with a @docstring, and keep the definition in util/. > My 2 cents. > OK >> >>>>> diff --git a/util/error-report.c b/util/error-report.c >>>>> index 1b17c11de1..20618640e8 100644 >>>>> --- a/util/error-report.c >>>>> +++ b/util/error-report.c >>>>> @@ -169,13 +169,6 @@ static void print_loc(void) >>>>> } >>>>> } >>>>> -static char * >>>>> -real_time_iso8601(void) >>>>> -{ >>>>> - g_autoptr(GDateTime) dt = g_date_time_new_now_utc(); >>>>> - return g_date_time_format_iso8601(dt); >>>>> -} -- Best regards, Vladimir ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 3/3] chardev: add logtimestamp option 2025-11-28 20:05 [PATCH 0/3] char: add option to inject timestamps into logfile Vladimir Sementsov-Ogievskiy 2025-11-28 20:05 ` [RFC PATCH 1/3] char: qemu_chr_write_log() use qemu_write_full() Vladimir Sementsov-Ogievskiy 2025-11-28 20:05 ` [PATCH 2/3] error-report: move real_time_iso8601() to header Vladimir Sementsov-Ogievskiy @ 2025-11-28 20:05 ` Vladimir Sementsov-Ogievskiy 2 siblings, 0 replies; 9+ messages in thread From: Vladimir Sementsov-Ogievskiy @ 2025-11-28 20:05 UTC (permalink / raw) To: marcandre.lureau Cc: pbonzini, armbru, eblake, berrange, vsementsov, yc-core, d-tatianin, qemu-devel Add an option to inject timestamps into serial log file. That simplifies debugging a lot, when you can simply compare QEMU logs with guest console logs. Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru> --- chardev/char.c | 63 ++++++++++++++++++++++++++++++++++++++---- include/chardev/char.h | 2 ++ qapi/char.json | 6 +++- 3 files changed, 65 insertions(+), 6 deletions(-) diff --git a/chardev/char.c b/chardev/char.c index 64006a3119..57c65544d0 100644 --- a/chardev/char.c +++ b/chardev/char.c @@ -82,12 +82,8 @@ void qemu_chr_be_event(Chardev *s, QEMUChrEvent event) CHARDEV_GET_CLASS(s)->chr_be_event(s, event); } -static void qemu_chr_write_log(Chardev *s, const uint8_t *buf, size_t len) +static void do_write_log(Chardev *s, const uint8_t *buf, size_t len) { - if (s->logfd < 0) { - return; - } - if (qemu_write_full(s->logfd, buf, len) < len) { /* * qemu_write_full() is defined with G_GNUC_WARN_UNUSED_RESULT, @@ -96,6 +92,55 @@ static void qemu_chr_write_log(Chardev *s, const uint8_t *buf, size_t len) } } +static void do_write_log_timestamps(Chardev *s, const uint8_t *buf, size_t len) +{ + g_autofree char *timestr = NULL; + + while (len) { + size_t i; + + if (s->log_line_start) { + if (!timestr) { + timestr = real_time_iso8601(); + } + do_write_log(s, (const uint8_t *)timestr, strlen(timestr)); + do_write_log(s, (const uint8_t *)" ", 1); + s->log_line_start = false; + } + + for (i = 0; i < len; i++) { + if (buf[i] == '\n') { + break; + } + } + + if (i == len) { + /* not found \n */ + do_write_log(s, buf, len); + return; + } + + i += 1; + do_write_log(s, buf, i); + buf += i; + len -= i; + s->log_line_start = true; + } +} + +static void qemu_chr_write_log(Chardev *s, const uint8_t *buf, size_t len) +{ + if (s->logfd < 0) { + return; + } + + if (s->logtimestamp) { + do_write_log_timestamps(s, buf, len); + } else { + do_write_log(s, buf, len); + } +} + static int qemu_chr_write_buffer(Chardev *s, const uint8_t *buf, int len, int *offset, bool write_all) @@ -249,6 +294,7 @@ static void qemu_char_open(Chardev *chr, ChardevBackend *backend, } else { flags |= O_TRUNC; } + chr->logtimestamp = common->has_logtimestamp && common->logtimestamp; chr->logfd = qemu_create(common->logfile, flags, 0666, errp); if (chr->logfd < 0) { return; @@ -266,6 +312,7 @@ static void char_init(Object *obj) chr->handover_yank_instance = false; chr->logfd = -1; + chr->log_line_start = true; qemu_mutex_init(&chr->chr_write_lock); /* @@ -505,6 +552,9 @@ void qemu_chr_parse_common(QemuOpts *opts, ChardevCommon *backend) backend->logfile = g_strdup(logfile); backend->has_logappend = true; backend->logappend = qemu_opt_get_bool(opts, "logappend", false); + + backend->has_logtimestamp = true; + backend->logtimestamp = qemu_opt_get_bool(opts, "logtimestamp", false); } static const ChardevClass *char_get_class(const char *driver, Error **errp) @@ -956,6 +1006,9 @@ QemuOptsList qemu_chardev_opts = { },{ .name = "logappend", .type = QEMU_OPT_BOOL, + },{ + .name = "logtimestamp", + .type = QEMU_OPT_BOOL, },{ .name = "mouse", .type = QEMU_OPT_BOOL, diff --git a/include/chardev/char.h b/include/chardev/char.h index b65e9981c1..6a5318c918 100644 --- a/include/chardev/char.h +++ b/include/chardev/char.h @@ -64,6 +64,8 @@ struct Chardev { char *label; char *filename; int logfd; + bool logtimestamp; + bool log_line_start; int be_open; /* used to coordinate the chardev-change special-case: */ bool handover_yank_instance; diff --git a/qapi/char.json b/qapi/char.json index 140614f82c..a4abafa680 100644 --- a/qapi/char.json +++ b/qapi/char.json @@ -197,11 +197,15 @@ # @logappend: true to append instead of truncate (default to false to # truncate) # +# @logtimestamp: true to insert timestamps into logfile +# (default false) (since 11.0) +# # Since: 2.6 ## { 'struct': 'ChardevCommon', 'data': { '*logfile': 'str', - '*logappend': 'bool' } } + '*logappend': 'bool', + '*logtimestamp': 'bool' } } ## # @ChardevFile: -- 2.48.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
end of thread, other threads:[~2025-12-04 12:54 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-11-28 20:05 [PATCH 0/3] char: add option to inject timestamps into logfile Vladimir Sementsov-Ogievskiy 2025-11-28 20:05 ` [RFC PATCH 1/3] char: qemu_chr_write_log() use qemu_write_full() Vladimir Sementsov-Ogievskiy 2025-11-28 20:05 ` [PATCH 2/3] error-report: move real_time_iso8601() to header Vladimir Sementsov-Ogievskiy 2025-12-03 14:16 ` Markus Armbruster 2025-12-03 15:05 ` Vladimir Sementsov-Ogievskiy 2025-12-04 8:12 ` Markus Armbruster 2025-12-04 8:30 ` Philippe Mathieu-Daudé 2025-12-04 12:54 ` Vladimir Sementsov-Ogievskiy 2025-11-28 20:05 ` [PATCH 3/3] chardev: add logtimestamp option Vladimir Sementsov-Ogievskiy
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).