chiark / gitweb /
journalctl: add new short-monotonic output mode
authorLennart Poettering <lennart@poettering.net>
Sat, 7 Jan 2012 03:41:30 +0000 (04:41 +0100)
committerLennart Poettering <lennart@poettering.net>
Sat, 7 Jan 2012 03:41:30 +0000 (04:41 +0100)
src/journal/journalctl.c
src/logs-show.c
src/logs-show.h
src/systemctl.c

index 393601c7753938d018a8f7bdc084113badd9d569..910259f732dd8df78bd10c05dc2e73fd22dd00bb 100644 (file)
@@ -57,7 +57,7 @@ static int help(void) {
                "  -f --follow         Follow journal\n"
                "  -n --lines=INTEGER  Journal entries to show\n"
                "     --no-tail        Show all lines, even in follow mode\n"
                "  -f --follow         Follow journal\n"
                "  -n --lines=INTEGER  Journal entries to show\n"
                "     --no-tail        Show all lines, even in follow mode\n"
-               "  -o --output=STRING  Change journal output mode (short, verbose, export, json)\n"
+               "  -o --output=STRING  Change journal output mode (short, short-verbose, verbose, export, json)\n"
                "     --new-id128      Generate a new 128 Bit id\n",
                program_invocation_short_name);
 
                "     --new-id128      Generate a new 128 Bit id\n",
                program_invocation_short_name);
 
index decb89b6dfe50428439fdab5bce74eaa47323a6b..58d1e99dfa18fe947efd7c97b066ad53d0f6d54d 100644 (file)
@@ -84,12 +84,8 @@ static bool shall_print(bool show_all, char *p, size_t l) {
         return true;
 }
 
         return true;
 }
 
-static int output_short(sd_journal *j, unsigned line, bool show_all) {
+static int output_short(sd_journal *j, unsigned line, bool show_all, bool monotonic) {
         int r;
         int r;
-        uint64_t realtime;
-        time_t t;
-        struct tm tm;
-        char buf[64];
         const void *data;
         size_t length;
         size_t n = 0;
         const void *data;
         size_t length;
         size_t n = 0;
@@ -140,20 +136,39 @@ static int output_short(sd_journal *j, unsigned line, bool show_all) {
                 goto finish;
         }
 
                 goto finish;
         }
 
-        r = sd_journal_get_realtime_usec(j, &realtime);
-        if (r < 0) {
-                log_error("Failed to get realtime: %s", strerror(-r));
-                goto finish;
-        }
+        if (monotonic) {
+                uint64_t t;
 
 
-        t = (time_t) (realtime / USEC_PER_SEC);
-        if (strftime(buf, sizeof(buf), "%b %d %H:%M:%S", localtime_r(&t, &tm)) <= 0) {
-                log_error("Failed to format time.");
-                goto finish;
-        }
+                r = sd_journal_get_monotonic_usec(j, &t, NULL);
+                if (r >= 0) {
+                        printf("[%5llu.%06llu]",
+                               (unsigned long long) (t / USEC_PER_SEC),
+                               (unsigned long long) (t % USEC_PER_SEC));
 
 
-        fputs(buf, stdout);
-        n += strlen(buf);
+                        n += 1 + 5 + 1 + 6 + 1;
+                }
+
+        } else {
+                char buf[64];
+                uint64_t realtime;
+                time_t t;
+                struct tm tm;
+
+                r = sd_journal_get_realtime_usec(j, &realtime);
+                if (r < 0) {
+                        log_error("Failed to get realtime: %s", strerror(-r));
+                        goto finish;
+                }
+
+                t = (time_t) (realtime / USEC_PER_SEC);
+                if (strftime(buf, sizeof(buf), "%b %d %H:%M:%S", localtime_r(&t, &tm)) <= 0) {
+                        log_error("Failed to format time.");
+                        goto finish;
+                }
+
+                fputs(buf, stdout);
+                n += strlen(buf);
+        }
 
         if (hostname && shall_print(show_all, hostname, hostname_len)) {
                 printf(" %.*s", (int) hostname_len, hostname);
 
         if (hostname && shall_print(show_all, hostname, hostname_len)) {
                 printf(" %.*s", (int) hostname_len, hostname);
@@ -209,6 +224,14 @@ finish:
         return r;
 }
 
         return r;
 }
 
+static int output_short_realtime(sd_journal *j, unsigned line, bool show_all) {
+        return output_short(j, line, show_all, false);
+}
+
+static int output_short_monotonic(sd_journal *j, unsigned line, bool show_all) {
+        return output_short(j, line, show_all, true);
+}
+
 static int output_verbose(sd_journal *j, unsigned line, bool show_all) {
         const void *data;
         size_t length;
 static int output_verbose(sd_journal *j, unsigned line, bool show_all) {
         const void *data;
         size_t length;
@@ -432,7 +455,8 @@ static int output_json(sd_journal *j, unsigned line, bool show_all) {
 }
 
 static int (*output_funcs[_OUTPUT_MODE_MAX])(sd_journal*j, unsigned line, bool show_all) = {
 }
 
 static int (*output_funcs[_OUTPUT_MODE_MAX])(sd_journal*j, unsigned line, bool show_all) = {
-        [OUTPUT_SHORT] = output_short,
+        [OUTPUT_SHORT] = output_short_realtime,
+        [OUTPUT_SHORT_MONOTONIC] = output_short_monotonic,
         [OUTPUT_VERBOSE] = output_verbose,
         [OUTPUT_EXPORT] = output_export,
         [OUTPUT_JSON] = output_json
         [OUTPUT_VERBOSE] = output_verbose,
         [OUTPUT_EXPORT] = output_export,
         [OUTPUT_JSON] = output_json
@@ -575,6 +599,7 @@ finish:
 
 static const char *const output_mode_table[_OUTPUT_MODE_MAX] = {
         [OUTPUT_SHORT] = "short",
 
 static const char *const output_mode_table[_OUTPUT_MODE_MAX] = {
         [OUTPUT_SHORT] = "short",
+        [OUTPUT_SHORT_MONOTONIC] = "short-monotonic",
         [OUTPUT_VERBOSE] = "verbose",
         [OUTPUT_EXPORT] = "export",
         [OUTPUT_JSON] = "json"
         [OUTPUT_VERBOSE] = "verbose",
         [OUTPUT_EXPORT] = "export",
         [OUTPUT_JSON] = "json"
index d3f3c759603c6ce7ac557e27abedcc8a7aa76de5..2158a44cea90a67fa45d17f665e2a7cc17d0a9e6 100644 (file)
@@ -30,6 +30,7 @@
 
 typedef enum OutputMode {
         OUTPUT_SHORT,
 
 typedef enum OutputMode {
         OUTPUT_SHORT,
+        OUTPUT_SHORT_MONOTONIC,
         OUTPUT_VERBOSE,
         OUTPUT_EXPORT,
         OUTPUT_JSON,
         OUTPUT_VERBOSE,
         OUTPUT_EXPORT,
         OUTPUT_JSON,
index 9b915f65d6248b6723a6c45f3bc438b151f3f13d..dfdbd1d63302789920f9685fa28ffbd444b1e53e 100644 (file)
@@ -3979,7 +3979,7 @@ static int systemctl_help(void) {
                "     --runtime        Enable unit files only temporarily until next reboot\n"
                "  -n --lines=INTEGER  Journal entries to show\n"
                "     --follow         Follow journal\n"
                "     --runtime        Enable unit files only temporarily until next reboot\n"
                "  -n --lines=INTEGER  Journal entries to show\n"
                "     --follow         Follow journal\n"
-               "  -o --output=STRING  Change journal output mode (short, verbose, export, json)\n\n"
+               "  -o --output=STRING  Change journal output mode (short, short-monotonic, verbose, export, json)\n\n"
                "Unit Commands:\n"
                "  list-units                      List loaded units\n"
                "  start [NAME...]                 Start (activate) one or more units\n"
                "Unit Commands:\n"
                "  list-units                      List loaded units\n"
                "  start [NAME...]                 Start (activate) one or more units\n"