vlog: Change the default timestamp structure.
authorGurucharan Shetty <gshetty@nicira.com>
Fri, 27 Jan 2012 18:54:02 +0000 (10:54 -0800)
committerGurucharan Shetty <gshetty@nicira.com>
Sat, 28 Jan 2012 00:56:12 +0000 (16:56 -0800)
Change the default timestamp for console and file logs to
UTC in a format that satisfies timestamp requirements in RFC 5424.

Also, add the ability for ovs-appctl to log timestamps in UTC.

Bug #9052.

Signed-off-by: Gurucharan Shetty <gshetty@nicira.com>
NEWS
lib/dynamic-string.c
lib/dynamic-string.h
lib/vlog.c
lib/vlog.h
utilities/ovs-appctl.8.in

diff --git a/NEWS b/NEWS
index d7332f89f3bd6d4b259ea1acbd4c21a97fed865e..e015739d06b7abb750964aab552137f04e8d68d7 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -6,6 +6,9 @@ post-v1.5.0
         - The default bond_mode changed from SLB to active-backup, to protect
           unsuspecting users from the significant risks of SLB bonds (which are
           documented in vswitchd/INTERNALS).
+    - Logging to console and file will have UTC timestamp as a default for all
+      the daemons. An example of the default format is 2012-01-27T16:35:17Z.
+      ovs-appctl can be used to change the default format as before.
 
 
 v1.5.0 - xx xxx xxxx
index dbb33a3563304cfec53e5505598096ef35e132d2..8c675d14a63ddacd6b7ce56878a4a4b2baa6eeb1 100644 (file)
@@ -173,13 +173,19 @@ ds_put_printable(struct ds *ds, const char *s, size_t n)
     }
 }
 
+/* Writes the current time to 'string' based on 'template'.
+ * The current time is either localtime or UTC based on 'utc'. */
 void
-ds_put_strftime(struct ds *ds, const char *template, const struct tm *tm)
+ds_put_strftime(struct ds *ds, const char *template, bool utc)
 {
-    if (!tm) {
-        time_t now = time_wall();
+    const struct tm *tm;
+    time_t now = time_wall();
+    if (utc) {
+        tm = gmtime(&now);
+    } else {
         tm = localtime(&now);
     }
+
     for (;;) {
         size_t avail = ds->string ? ds->allocated - ds->length + 1 : 0;
         size_t used = strftime(&ds->string[ds->length], avail, template, tm);
index 2961a013742998c04c5fbd586e05d16c416bf4c9..35a035730baa636e46645cc7440679d05f04225d 100644 (file)
@@ -49,7 +49,7 @@ void ds_put_format(struct ds *, const char *, ...) PRINTF_FORMAT(2, 3);
 void ds_put_format_valist(struct ds *, const char *, va_list)
     PRINTF_FORMAT(2, 0);
 void ds_put_printable(struct ds *, const char *, size_t);
-void ds_put_strftime(struct ds *, const char *, const struct tm *)
+void ds_put_strftime(struct ds *, const char *, bool utc)
     STRFTIME_FORMAT(2);
 void ds_put_hex_dump(struct ds *ds, const void *buf_, size_t size,
                      uintptr_t ofs, bool ascii);
index 0d7f4d159ab63c540f429b10756bffa0a2bfae8e..7d9c061e47bee0feb2c89d63ef966df02f3c06f8 100644 (file)
@@ -610,7 +610,11 @@ format_log_message(const struct vlog_module *module, enum vlog_level level,
             break;
         case 'd':
             p = fetch_braces(p, "%Y-%m-%d %H:%M:%S", tmp, sizeof tmp);
-            ds_put_strftime(s, tmp, NULL);
+            ds_put_strftime(s, tmp, false);
+            break;
+        case 'D':
+            p = fetch_braces(p, "%Y-%m-%d %H:%M:%S", tmp, sizeof tmp);
+            ds_put_strftime(s, tmp, true);
             break;
         case 'm':
             /* Format user-supplied log message and trim trailing new-lines. */
index 6fa007b275219a03dabe9bcdaa27ce8645f1dcf6..5954d217a413424d05dcb54c166902ebe34efab0 100644 (file)
@@ -51,8 +51,8 @@ enum vlog_level vlog_get_level_val(const char *name);
 /* Facilities that we can log to. */
 #define VLOG_FACILITIES                                         \
     VLOG_FACILITY(SYSLOG, "%05N|%c|%p|%m")                      \
-    VLOG_FACILITY(CONSOLE, "%d{%b %d %H:%M:%S}|%05N|%c|%p|%m")  \
-    VLOG_FACILITY(FILE, "%d{%b %d %H:%M:%S}|%05N|%c|%p|%m")
+    VLOG_FACILITY(CONSOLE, "%D{%Y-%m-%dT%H:%M:%SZ}|%05N|%c|%p|%m")  \
+    VLOG_FACILITY(FILE, "%D{%Y-%m-%dT%H:%M:%SZ}|%05N|%c|%p|%m")
 enum vlog_facility {
 #define VLOG_FACILITY(NAME, PATTERN) VLF_##NAME,
     VLOG_FACILITIES
index d851ea1011ed92be3ca02eb4e242f6091f224c71..6a61732d8aa39ea1246e3c955d471694c85ca533 100644 (file)
@@ -139,6 +139,13 @@ The current date and time in ISO 8601 format (YYYY\-MM\-DD HH:MM:SS).
 The current date and time in the specified \fIformat\fR, which takes
 the same format as the \fItemplate\fR argument to \fBstrftime\fR(3).
 .
+.IP \fB%D\fR
+The current UTC date and time in ISO 8601 format (YYYY\-MM\-DD HH:MM:SS).
+.
+.IP \fB%D{\fIformat\fB}\fR
+The current UTC date and time in the specified \fIformat\fR, which takes
+the same format as the \fItemplate\fR argument to \fBstrftime\fR(3).
+.
 .IP \fB%m\fR
 The message being logged.
 .
@@ -184,8 +191,8 @@ width.  (A field wider than \fIwidth\fR is not truncated to fit.)
 .RE
 .
 .IP
-The default pattern for console and file output is \fB%d{%b %d
-%H:%M:%S}|%05N|%c|%p|%m\fR; for syslog output, \fB%05N|%c|%p|%m\fR.
+The default pattern for console and file output is \fB%D{%Y-%m-%dT
+%H:%M:%SZ}|%05N|%c|%p|%m\fR; for syslog output, \fB%05N|%c|%p|%m\fR.
 .
 .IP "\fBvlog/reopen\fR"
 Causes the daemon to close and reopen its log file.  (This