From: Lennart Poettering Date: Tue, 10 Jul 2012 23:36:55 +0000 (+0200) Subject: journalctl: add a marker to log output for reboots X-Git-Tag: v187~127 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;ds=sidebyside;h=14a65d65a0c25ba4809b8d97f54ebf3e12eac84c;p=elogind.git journalctl: add a marker to log output for reboots With this we'll print a marker "----- Reboot -----" between two subsequent lines with different boot IDs. --- diff --git a/TODO b/TODO index 5df72cdc5..0b646eaa2 100644 --- a/TODO +++ b/TODO @@ -56,8 +56,6 @@ Features: * when running as user instance: implicitly default to WorkingDirectory=$HOME for all services. -* journalctl highlight reboots - * Merge KillUnit()'s mode and who params into one * load-fragment: when loading a unit file via a chain of symlinks diff --git a/man/journalctl.xml b/man/journalctl.xml index ffe988a61..bb964b01e 100644 --- a/man/journalctl.xml +++ b/man/journalctl.xml @@ -223,7 +223,7 @@ Takes an absolute directory path as argument. If - specified will opearte on the + specified will operate on the specified journal directory instead of the default runtime and system journal paths. diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c index 4c975d3e7..43cd2a3fe 100644 --- a/src/journal/journalctl.c +++ b/src/journal/journalctl.c @@ -299,6 +299,8 @@ int main(int argc, char *argv[]) { sd_journal *j = NULL; unsigned line = 0; bool need_seek = false; + sd_id128_t previous_boot_id; + bool previous_boot_id_valid = false; log_parse_environment(); log_open(); @@ -390,6 +392,8 @@ int main(int argc, char *argv[]) { for (;;) { for (;;) { + sd_id128_t boot_id; + if (need_seek) { r = sd_journal_next(j); if (r < 0) { @@ -401,6 +405,16 @@ int main(int argc, char *argv[]) { if (r == 0) break; + r = sd_journal_get_monotonic_usec(j, NULL, &boot_id); + if (r >= 0) { + if (previous_boot_id_valid && + !sd_id128_equal(boot_id, previous_boot_id)) + printf(ANSI_HIGHLIGHT_ON "----- Reboot -----" ANSI_HIGHLIGHT_OFF "\n"); + + previous_boot_id = boot_id; + previous_boot_id_valid = true; + } + line ++; r = output_journal(j, arg_output, line, 0, arg_show_all); diff --git a/src/journal/sd-journal.c b/src/journal/sd-journal.c index 6331f042c..5420be13e 100644 --- a/src/journal/sd-journal.c +++ b/src/journal/sd-journal.c @@ -1397,8 +1397,6 @@ _public_ int sd_journal_get_monotonic_usec(sd_journal *j, uint64_t *ret, sd_id12 if (!j) return -EINVAL; - if (!ret) - return -EINVAL; f = j->current_file; if (!f) @@ -1422,7 +1420,9 @@ _public_ int sd_journal_get_monotonic_usec(sd_journal *j, uint64_t *ret, sd_id12 return -ESTALE; } - *ret = le64toh(o->entry.monotonic); + if (ret) + *ret = le64toh(o->entry.monotonic); + return 0; }