]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: log: add time second fraction field to rfc5424 log timestamp.
authorEmeric Brun <ebrun@haproxy.com>
Thu, 2 Jul 2020 14:16:59 +0000 (16:16 +0200)
committerWilly Tarreau <w@1wt.eu>
Thu, 2 Jul 2020 15:56:06 +0000 (17:56 +0200)
This patch adds the time second fraction in microseconds
as supported by the rfc.

include/haproxy/log.h
src/log.c
src/sink.c

index 4fccb531309792acb6c86e8c72ebeb0fc9a5cfda..c3e1d412eed34401e0faa935f45a362e2995e7c2 100644 (file)
@@ -137,7 +137,7 @@ char *lf_port(char *dst, const struct sockaddr *sockaddr, size_t size, const str
 /*
  * Function to handle log header building (exported for sinks)
  */
-char *update_log_hdr_rfc5424(const time_t time);
+char *update_log_hdr_rfc5424(const time_t time, suseconds_t frac);
 char *update_log_hdr(const time_t time);
 char * get_format_pid_sep1(int format, size_t *len);
 char * get_format_pid_sep2(int format, size_t *len);
index 192525eabee00255f73223ae49c70913af5621b6..e65b9ca9958c095ef731d23077f16a39bca2b023 100644 (file)
--- a/src/log.c
+++ b/src/log.c
@@ -1483,10 +1483,11 @@ char *update_log_hdr(const time_t time)
  * the beginning of logheader_rfc5424 once a second and return the pointer
  * to the first character after it.
  */
-char *update_log_hdr_rfc5424(const time_t time)
+char *update_log_hdr_rfc5424(const time_t time, const suseconds_t frac)
 {
        static THREAD_LOCAL long tvsec;
        const char *gmt_offset;
+       char c;
 
        if (unlikely(time != tvsec || logheader_rfc5424_end == NULL)) {
                /* this string is rebuild only once a second */
@@ -1498,7 +1499,7 @@ char *update_log_hdr_rfc5424(const time_t time)
                gmt_offset = get_gmt_offset(time, &tm);
 
                hdr_len = snprintf(logheader_rfc5424, global.max_syslog_len,
-                                  "<<<<>1 %4d-%02d-%02dT%02d:%02d:%02d%.3s:%.2s %s ",
+                                  "<<<<>1 %4d-%02d-%02dT%02d:%02d:%02d.000000%.3s:%.2s %s ",
                                   tm.tm_year+1900, tm.tm_mon+1, tm.tm_mday,
                                   tm.tm_hour, tm.tm_min, tm.tm_sec,
                                   gmt_offset, gmt_offset+3,
@@ -1513,6 +1514,11 @@ char *update_log_hdr_rfc5424(const time_t time)
                logheader_rfc5424_end = logheader_rfc5424 + hdr_len;
        }
 
+       /* utoa_pad add a trailing '\0' so we save the char to restore */
+       c = logheader_rfc5424[33];
+       utoa_pad(frac, logheader_rfc5424 + 27, 7);
+       logheader_rfc5424[33] = c;
+
        logheader_rfc5424_end[0] = 0; // ensure we get rid of any previous attempt
 
        return logheader_rfc5424_end;
@@ -1629,7 +1635,7 @@ static inline void __do_send_log(struct logsrv *logsrv, int nblogger, char *pid_
 
        case LOG_FORMAT_RFC5424:
                hdr = logheader_rfc5424;
-               hdr_ptr = update_log_hdr_rfc5424(time);
+               hdr_ptr = update_log_hdr_rfc5424(time, date.tv_usec);
                sd_max = sd_size; /* the SD part allowed only in RFC5424 */
                break;
 
index e3eac2bb9ed0a2739b7b345a7dd7043e994e20d7..19a555e44d10333d0596000ee59d6b8b6fa03ac9 100644 (file)
@@ -182,7 +182,7 @@ ssize_t __sink_write(struct sink *sink, const struct ist msg[], size_t nmsg,
         }
        else if (sink->fmt == SINK_FMT_RFC5424) {
                pfx[npfx].ptr = logheader_rfc5424;
-                pfx[npfx].len = update_log_hdr_rfc5424(date.tv_sec) - pfx[npfx].ptr;
+               pfx[npfx].len = update_log_hdr_rfc5424(date.tv_sec, date.tv_usec) - pfx[npfx].ptr;
                log_format = LOG_FORMAT_RFC5424;
        }
        else {