[PATCH] syslogd: add config option to include milliseconds in timestamps
Denys Vlasenko
vda.linux at googlemail.com
Wed Jan 29 12:57:39 UTC 2020
Applied, thanks!
On Mon, Jan 27, 2020 at 3:36 PM Peter Korsgaard <peter at korsgaard.com> wrote:
>
> For some use cases, having logs with more than 1 second accuracy can be
> helpful. Add an option to include milliseconds when adding a timestamp in
> HH:MM:SS.mmm format, similar to syslog-ng with fraq_digits(3) or journalctl
> -o short-precise.
>
> For simplicity, abuse the remaining space in the buffer used by ctime to add
> the millieconds (overwriting year).
>
> /scripts/bloat-o-meter busybox_old busybox
> function old new delta
> .rodata 8353 8360 +7
> ------------------------------------------------------------------------------
> (add/remove: 0/0 grow/shrink: 1/0 up/down: 7/0) Total: 7 bytes
>
> Signed-off-by: Peter Korsgaard <peter at korsgaard.com>
> ---
> sysklogd/syslogd.c | 27 ++++++++++++++++++++++++---
> 1 file changed, 24 insertions(+), 3 deletions(-)
>
> diff --git a/sysklogd/syslogd.c b/sysklogd/syslogd.c
> index 0e226124a..95e213a0a 100644
> --- a/sysklogd/syslogd.c
> +++ b/sysklogd/syslogd.c
> @@ -64,6 +64,14 @@
> //config: help
> //config: Supports restricted syslogd config. See docs/syslog.conf.txt
> //config:
> +//config:config FEATURE_SYSLOGD_PRECISE_TIMESTAMPS
> +//config: bool "Include milliseconds in timestamps"
> +//config: default n
> +//config: depends on SYSLOGD
> +//config: help
> +//config: Includes milliseconds (HH:MM:SS.mmm) in timestamp when
> +//config: timestamps are added.
> +//config:
> //config:config FEATURE_SYSLOGD_READ_BUFFER_SIZE
> //config: int "Read buffer size in bytes"
> //config: default 256
> @@ -276,7 +284,7 @@ struct globals {
> /* ...then copy to parsebuf, escaping control chars */
> /* (can grow x2 max) */
> char parsebuf[MAX_READ*2];
> - /* ...then sprintf into printbuf, adding timestamp (15 chars),
> + /* ...then sprintf into printbuf, adding timestamp (15 or 19 chars),
> * host (64), fac.prio (20) to the message */
> /* (growth by: 15 + 64 + 20 + delims = ~110) */
> char printbuf[MAX_READ*2 + 128];
> @@ -833,11 +841,24 @@ static void timestamp_and_log(int pri, char *msg, int len)
> }
>
> if (!timestamp) {
> +#if ENABLE_FEATURE_SYSLOGD_PRECISE_TIMESTAMPS
> + struct timeval tv;
> + gettimeofday(&tv, NULL);
> + now = tv.tv_sec;
> +#else
> time(&now);
> +#endif
> timestamp = ctime(&now) + 4; /* skip day of week */
> - }
>
> - timestamp[15] = '\0';
> +#if ENABLE_FEATURE_SYSLOGD_PRECISE_TIMESTAMPS
> + /* overwrite year by milliseconds, zero terminate */
> + sprintf(timestamp + 15, ".%03ld", tv.tv_usec / 1000);
> +#else
> + timestamp[15] = '\0';
> +#endif
> + }
> + else
> + timestamp[15] = '\0';
>
> if (option_mask32 & OPT_kmsg) {
> log_to_kmsg(pri, msg);
> --
> 2.20.1
>
> _______________________________________________
> busybox mailing list
> busybox at busybox.net
> http://lists.busybox.net/mailman/listinfo/busybox
More information about the busybox
mailing list