This patchs adds a FEATURE to allow printing milliseconds in
addition in the timestamps generated by syslogd

Signed-off-by: Christophe Leroy <[email protected]>
---
 sysklogd/syslogd.c | 32 ++++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)

diff --git a/sysklogd/syslogd.c b/sysklogd/syslogd.c
index 4265f4f90..6b58d668b 100644
--- a/sysklogd/syslogd.c
+++ b/sysklogd/syslogd.c
@@ -88,6 +88,13 @@
 //config:      entire filesystem, which may cause your system to
 //config:      break badly.
 //config:
+//config:config FEATURE_SYSLOGD_MS
+//config:      bool "Include milliseconds in time"
+//config:      default n
+//config:      depends on SYSLOGD
+//config:      help
+//config:        This adds milliseconds to printed timestamps
+//config:
 //config:config FEATURE_IPC_SYSLOG_BUFFER_SIZE
 //config:      int "Circular buffer size in Kbytes (minimum 4KB)"
 //config:      default 16
@@ -814,17 +821,30 @@ static void parse_fac_prio_20(int pri, char *res20)
 static void timestamp_and_log(int pri, char *msg, int len)
 {
        char *timestamp;
+#if ENABLE_FEATURE_SYSLOGD_MS
+       struct timeval now;
+#else
        time_t now;
+#endif
 
        /* Jan 18 00:11:22 msg... */
        /* 01234567890123456 */
        if (len < 16 || msg[3] != ' ' || msg[6] != ' '
         || msg[9] != ':' || msg[12] != ':' || msg[15] != ' '
        ) {
+#if ENABLE_FEATURE_SYSLOGD_MS
+               gettimeofday(&now, NULL);
+               timestamp = ctime(&now.tv_sec) + 4; /* skip day of week */
+#else
                time(&now);
                timestamp = ctime(&now) + 4; /* skip day of week */
+#endif
        } else {
+#if ENABLE_FEATURE_SYSLOGD_MS
+               now.tv_sec = 0;
+#else
                now = 0;
+#endif
                timestamp = msg;
                msg += 16;
        }
@@ -836,11 +856,19 @@ static void timestamp_and_log(int pri, char *msg, int len)
        }
 
        if (option_mask32 & OPT_small)
+#if ENABLE_FEATURE_SYSLOGD_MS
+               sprintf(G.printbuf, "%s.%3.3ld %s\n", timestamp, now.tv_usec / 
1000, msg);
+#else
                sprintf(G.printbuf, "%s %s\n", timestamp, msg);
+#endif
        else {
                char res[20];
                parse_fac_prio_20(pri, res);
+#if ENABLE_FEATURE_SYSLOGD_MS
+               sprintf(G.printbuf, "%s.%3.3ld %.64s %s %s\n", timestamp, 
now.tv_usec / 1000, G.hostname, res, msg);
+#else
                sprintf(G.printbuf, "%s %.64s %s %s\n", timestamp, G.hostname, 
res, msg);
+#endif
        }
 
        /* Log message locally (to file or shared mem) */
@@ -868,7 +896,11 @@ static void timestamp_and_log(int pri, char *msg, int len)
                        return;
                }
 #endif
+#if ENABLE_FEATURE_SYSLOGD_MS
+               log_locally(now.tv_sec, G.printbuf, &G.logFile);
+#else
                log_locally(now, G.printbuf, &G.logFile);
+#endif
        }
 }
 
-- 
2.13.3

_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to