On Mon, Mar 13, 2017 at 11:14:36PM +0100, Alexander Bluhm wrote:
> I think the combination of local time and time zone without fractions
> of seconds is the best choice for newsyslog.  Or should we use
> 2017-03-13T21:30:04.822Z in newsyslogd?

Regarding all the Feedback I summarize:
- we need newsyslog not only for rotating syslogd log files
- there are logfiles without content for a while, so always having
  timestamp at the beginning is useful
- I do not plan to move the rotating functionality into syslogd now
- I stick to RFC 5424 and will not implement another short ISO format

But I came to the conclusion to have a new different format is bad,
so I propose this diff now.

With syslogd -Z you get:

2017-03-15T23:14:09.969Z t430s newsyslog[35784]: logfile turned over
2017-03-15T23:14:50.734Z t430s bluhm: foo

And with this default traditional sylogd format

2017-03-15T23:15:16.743Z t430s newsyslog[32804]: logfile turned over
Mar 16 00:16:20 t430s bluhm: bar

ok?

bluhm

Index: usr.bin/newsyslog/newsyslog.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/usr.bin/newsyslog/newsyslog.c,v
retrieving revision 1.101
diff -u -p -r1.101 newsyslog.c
--- usr.bin/newsyslog/newsyslog.c       1 Jun 2016 16:57:48 -0000       1.101
+++ usr.bin/newsyslog/newsyslog.c       15 Mar 2017 23:13:28 -0000
@@ -142,7 +142,7 @@ int force = 0;              /* Force the logs to be 
 char   *conf = CONF;           /* Configuration file to use */
 time_t timenow;
 char   hostname[HOST_NAME_MAX+1]; /* Hostname */
-char   *daytime;               /* timenow in human readable form */
+char   daytime[33];            /* timenow in human readable form */
 char   *arcdir;                /* Dir to put archives in (if it exists) */
 
 FILE   *openmail(void);
@@ -402,12 +402,18 @@ send_signal(char *pidfile, int signal)
 void
 parse_args(int argc, char **argv)
 {
+       struct timeval now;
+       struct tm *tm;
+       size_t l;
        char *p;
        int ch;
 
-       timenow = time(NULL);
-       daytime = ctime(&timenow) + 4;
-       daytime[15] = '\0';
+       gettimeofday(&now, NULL);
+       timenow = now.tv_sec;
+       tm = gmtime(&now.tv_sec);
+       l = strftime(daytime, sizeof(daytime), "%FT%T", tm);
+       snprintf(daytime + l, sizeof(daytime) - l, ".%03ldZ",
+           now.tv_usec / 1000);
 
        /* Let's get our hostname */
        (void)gethostname(hostname, sizeof(hostname));

Reply via email to