summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/journal/journalctl.c2
-rw-r--r--src/logs-show.c61
-rw-r--r--src/logs-show.h1
-rw-r--r--src/systemctl.c2
4 files changed, 46 insertions, 20 deletions
diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c
index 393601c775..910259f732 100644
--- a/src/journal/journalctl.c
+++ b/src/journal/journalctl.c
@@ -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"
- " -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);
diff --git a/src/logs-show.c b/src/logs-show.c
index decb89b6df..58d1e99dfa 100644
--- a/src/logs-show.c
+++ b/src/logs-show.c
@@ -84,12 +84,8 @@ static bool shall_print(bool show_all, char *p, size_t l) {
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;
- uint64_t realtime;
- time_t t;
- struct tm tm;
- char buf[64];
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;
}
- 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);
@@ -209,6 +224,14 @@ finish:
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;
@@ -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) = {
- [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
@@ -575,6 +599,7 @@ finish:
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"
diff --git a/src/logs-show.h b/src/logs-show.h
index d3f3c75960..2158a44cea 100644
--- a/src/logs-show.h
+++ b/src/logs-show.h
@@ -30,6 +30,7 @@
typedef enum OutputMode {
OUTPUT_SHORT,
+ OUTPUT_SHORT_MONOTONIC,
OUTPUT_VERBOSE,
OUTPUT_EXPORT,
OUTPUT_JSON,
diff --git a/src/systemctl.c b/src/systemctl.c
index 9b915f65d6..dfdbd1d633 100644
--- a/src/systemctl.c
+++ b/src/systemctl.c
@@ -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"
- " -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"