The time logged is currently given as localtime without any time-zone
information. This is confusing in various scenarios.

Examples:
* If one is travelling across time-zones and the timestamps in the log
appear out of order.
* Comparing dates with `datediff` gives an offset by the time-zone

This patch would reformat the time-stamp to a full ISO-8601 version.
It includes the 'T' separating date and time. This could be removed.

Old: [2019-03-04 16:15]
New: [2019-03-04T16:15-05:00]

Signed-off-by: Florian Wehner <[email protected]>
---
 lib/libalpm/log.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/lib/libalpm/log.c b/lib/libalpm/log.c
index e46ad3c3..cf869a08 100644
--- a/lib/libalpm/log.c
+++ b/lib/libalpm/log.c
@@ -20,6 +20,7 @@
 
 #include <stdio.h>
 #include <stdarg.h>
+#include <stdlib.h>
 #include <errno.h>
 #include <syslog.h>
 
@@ -37,12 +38,17 @@
 static int _alpm_log_leader(FILE *f, const char *prefix)
 {
        time_t t = time(NULL);
+       int tz_h, tz_m;
        struct tm *tm = localtime(&t);
 
+       /* Calculate the timezone offset ±hh:mm */
+       tz_h = tm->tm_gmtoff/3600;
+       tz_m = abs(tm->tm_gmtoff - (tz_h*3600))/60;
+
        /* Use ISO-8601 date format */
-       return fprintf(f, "[%04d-%02d-%02d %02d:%02d] [%s] ",
+       return fprintf(f, "[%04d-%02d-%02dT%02d:%02d%+03d:%02d] [%s] ",
                        tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday,
-                       tm->tm_hour, tm->tm_min, prefix);
+                       tm->tm_hour, tm->tm_min, tz_h, tz_m, prefix);
 }
 
 /** A printf-like function for logging.
-- 
2.21.0

Reply via email to