X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fjournal%2Fjournalctl.c;h=de972a17dbe0b385f44bee421f44d86a5623bbc2;hp=409f0822766e3be61b855fc7604882dd02a6fa46;hb=a72b63536f1da3a97677bf38590f22a962e5fe98;hpb=e724b0639c43c2821613fc4f7f755f87c49a22e8 diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c index 409f08227..de972a17d 100644 --- a/src/journal/journalctl.c +++ b/src/journal/journalctl.c @@ -71,6 +71,7 @@ static bool arg_no_tail = false; static bool arg_quiet = false; static bool arg_merge = false; static bool arg_this_boot = false; +static bool arg_dmesg = false; static const char *arg_cursor = NULL; static const char *arg_directory = NULL; static int arg_priorities = 0xFF; @@ -108,6 +109,7 @@ static int help(void) { " --until=DATE Stop showing entries older or of the specified date\n" " -c --cursor=CURSOR Start showing entries from specified cursor\n" " -b --this-boot Show data only from current boot\n" + " -k --dmesg Show kmsg log from current boot\n" " -u --unit=UNIT Show data only from the specified unit\n" " --user-unit=UNIT Show data only from the specified user session unit\n" " -p --priority=RANGE Show only messages within the specified priority range\n" @@ -187,6 +189,7 @@ static int parse_argv(int argc, char *argv[]) { { "quiet", no_argument, NULL, 'q' }, { "merge", no_argument, NULL, 'm' }, { "this-boot", no_argument, NULL, 'b' }, + { "dmesg", no_argument, NULL, 'k' }, { "directory", required_argument, NULL, 'D' }, { "root", required_argument, NULL, ARG_ROOT }, { "header", no_argument, NULL, ARG_HEADER }, @@ -215,7 +218,7 @@ static int parse_argv(int argc, char *argv[]) { assert(argc >= 0); assert(argv); - while ((c = getopt_long(argc, argv, "hefo:an::qmbD:p:c:u:F:xr", options, NULL)) >= 0) { + while ((c = getopt_long(argc, argv, "hefo:an::qmbkD:p:c:u:F:xr", options, NULL)) >= 0) { switch (c) { @@ -317,6 +320,10 @@ static int parse_argv(int argc, char *argv[]) { arg_this_boot = true; break; + case 'k': + arg_this_boot = arg_dmesg = true; + break; + case 'D': arg_directory = optarg; break; @@ -584,23 +591,20 @@ static int add_matches(sd_journal *j, char **args) { } static int add_this_boot(sd_journal *j) { - char match[9+32+1] = "_BOOT_ID="; - sd_id128_t boot_id; - int r; + if (!arg_this_boot) + return 0; + return add_match_this_boot(j); +} + +static int add_dmesg(sd_journal *j) { + int r; assert(j); - if (!arg_this_boot) + if (!arg_dmesg) return 0; - r = sd_id128_get_boot(&boot_id); - if (r < 0) { - log_error("Failed to get boot id: %s", strerror(-r)); - return r; - } - - sd_id128_to_string(boot_id, match + 9); - r = sd_journal_add_match(j, match, strlen(match)); + r = sd_journal_add_match(j, "_TRANSPORT=kernel", strlen("_TRANSPORT=kernel")); if (r < 0) { log_error("Failed to add match: %s", strerror(-r)); return r; @@ -1129,6 +1133,10 @@ int main(int argc, char *argv[]) { if (r < 0) return EXIT_FAILURE; + r = add_dmesg(j); + if (r < 0) + return EXIT_FAILURE; + r = add_units(j); strv_free(arg_system_units); strv_free(arg_user_units); @@ -1280,11 +1288,10 @@ int main(int argc, char *argv[]) { log_error("Failed to iterate through journal: %s", strerror(-r)); goto finish; } + if (r == 0) + break; } - if (r == 0) - break; - if (arg_until_set && !arg_reverse) { usec_t usec; @@ -1330,10 +1337,12 @@ int main(int argc, char *argv[]) { arg_catalog * OUTPUT_CATALOG; r = output_journal(stdout, j, arg_output, 0, flags); - if (r < 0 || ferror(stdout)) + need_seek = true; + if (r == -EADDRNOTAVAIL) + break; + else if (r < 0 || ferror(stdout)) goto finish; - need_seek = true; n_shown++; }