[pacman-dev] [PATCH v2] Reformatting log timestamp to include time-zone

Florian Wehner florian at whnr.de
Fri Mar 8 01:14:55 UTC 2019


> The tm_gmtoff field is derived from BSD and is a GNU library
> extension;
>
> So we can't use that.

Why reinventing the wheel? Using `strftime` would do the work for us,
right?

--Florian

The time logged is currently given as localtime without any timezone
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 including seconds.

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

Signed-off-by: Florian Wehner <florian at whnr.de>
---
 lib/libalpm/log.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/lib/libalpm/log.c b/lib/libalpm/log.c
index e46ad3c3..d8842a55 100644
--- a/lib/libalpm/log.c
+++ b/lib/libalpm/log.c
@@ -22,6 +22,7 @@
 #include <stdarg.h>
 #include <errno.h>
 #include <syslog.h>
+#include <time.h>
 
 /* libalpm */
 #include "log.h"
@@ -38,11 +39,12 @@ static int _alpm_log_leader(FILE *f, const char *prefix)
 {
 	time_t t = time(NULL);
 	struct tm *tm = localtime(&t);
+    int length = 32;
+    char timestamp[length];
 
 	/* Use ISO-8601 date format */
-	return fprintf(f, "[%04d-%02d-%02d %02d:%02d] [%s] ",
-			tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday,
-			tm->tm_hour, tm->tm_min, prefix);
+    strftime(timestamp,length,"%FT%X%z", tm);
+	return fprintf(f, "[%s] [%s] ", timestamp, prefix);
 }
 
 /** A printf-like function for logging.
-- 
2.21.0


More information about the pacman-dev mailing list