diff options
-rw-r--r-- | src/journal/journalctl.c | 3 | ||||
-rw-r--r-- | src/logs-show.c | 27 | ||||
-rw-r--r-- | src/logs-show.h | 1 | ||||
-rw-r--r-- | src/systemctl.c | 3 |
4 files changed, 30 insertions, 4 deletions
diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c index b2ebc7a498..4d9864729b 100644 --- a/src/journal/journalctl.c +++ b/src/journal/journalctl.c @@ -57,7 +57,8 @@ 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, short-monotonic, verbose, export, json)\n" + " -o --output=STRING Change journal output mode (short, short-monotonic,\n" + " verbose, export, json, cat)\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 8d728a66de..8d1c77e5c3 100644 --- a/src/logs-show.c +++ b/src/logs-show.c @@ -488,12 +488,34 @@ static int output_json(sd_journal *j, unsigned line, bool show_all) { return 0; } +static int output_cat(sd_journal *j, unsigned line, bool show_all) { + const void *data; + size_t l; + int r; + + assert(j); + + r = sd_journal_get_data(j, "MESSAGE", &data, &l); + if (r < 0) { + log_error("Failed to get data: %s", strerror(-r)); + return r; + } + + assert(l >= 8); + + fwrite((const char*) data + 8, 1, l - 8, stdout); + putchar('\n'); + + return 0; +} + static int (*output_funcs[_OUTPUT_MODE_MAX])(sd_journal*j, unsigned line, bool show_all) = { [OUTPUT_SHORT] = output_short_realtime, [OUTPUT_SHORT_MONOTONIC] = output_short_monotonic, [OUTPUT_VERBOSE] = output_verbose, [OUTPUT_EXPORT] = output_export, - [OUTPUT_JSON] = output_json + [OUTPUT_JSON] = output_json, + [OUTPUT_CAT] = output_cat }; int output_journal(sd_journal *j, OutputMode mode, unsigned line, bool show_all) { @@ -636,7 +658,8 @@ static const char *const output_mode_table[_OUTPUT_MODE_MAX] = { [OUTPUT_SHORT_MONOTONIC] = "short-monotonic", [OUTPUT_VERBOSE] = "verbose", [OUTPUT_EXPORT] = "export", - [OUTPUT_JSON] = "json" + [OUTPUT_JSON] = "json", + [OUTPUT_CAT] = "cat" }; DEFINE_STRING_TABLE_LOOKUP(output_mode, OutputMode); diff --git a/src/logs-show.h b/src/logs-show.h index 2158a44cea..abb82c8aac 100644 --- a/src/logs-show.h +++ b/src/logs-show.h @@ -34,6 +34,7 @@ typedef enum OutputMode { OUTPUT_VERBOSE, OUTPUT_EXPORT, OUTPUT_JSON, + OUTPUT_CAT, _OUTPUT_MODE_MAX, _OUTPUT_MODE_INVALID = -1 } OutputMode; diff --git a/src/systemctl.c b/src/systemctl.c index dfdbd1d633..b72fcbf807 100644 --- a/src/systemctl.c +++ b/src/systemctl.c @@ -3979,7 +3979,8 @@ 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, short-monotonic, verbose, export, json)\n\n" + " -o --output=STRING Change journal output mode (short, short-monotonic,\n" + " verbose, export, json, cat)\n\n" "Unit Commands:\n" " list-units List loaded units\n" " start [NAME...] Start (activate) one or more units\n" |