[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