From: Zbigniew Jędrzejewski-Szmek Date: Mon, 3 Jun 2013 22:28:12 +0000 (-0400) Subject: systemctl: limit logs in status to current boot X-Git-Tag: v205~172 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=5ec76417764e19486261fb8e38e8e71b28185b37;hp=7c1b8f043ed3d23663549dd6084c5a4de51b8e28 systemctl: limit logs in status to current boot Also reworded a few debug messages for brevity, and added a log statement which prints out the filter at debug level: Journal filter: (((UNIT=sys-module-configfs.device AND _PID=1) OR (COREDUMP_UNIT=sys-module-configfs.device AND MESSAGE_ID=fc2e22bc6ee647b6b90729ab34a250b1) OR _SYSTEMD_UNIT=sys-module-configfs.device) AND _BOOT_ID=4e3c518ab0474c12ac8de7896fe6b154) --- diff --git a/TODO b/TODO index 9ba1de01c..ecc5748c6 100644 --- a/TODO +++ b/TODO @@ -1,7 +1,4 @@ Bugfixes: -* systemctl status *.path shows all logs, not only the ones since the unit is - active - * check systemd-tmpfiles for selinux context hookup for mknod(), symlink() and similar * swap units that are activated by one name but shown in the kernel under another are semi-broken diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c index 2e672fa09..eb79c4d85 100644 --- a/src/journal/journalctl.c +++ b/src/journal/journalctl.c @@ -591,33 +591,10 @@ 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; - - assert(j); - if (!arg_this_boot) 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)); - if (r < 0) { - log_error("Failed to add match: %s", strerror(-r)); - return r; - } - - r = sd_journal_add_conjunction(j); - if (r < 0) - return r; - - return 0; + return add_match_this_boot(j); } static int add_dmesg(sd_journal *j) { diff --git a/src/journal/sd-journal.c b/src/journal/sd-journal.c index 779af62b5..cf60ebcee 100644 --- a/src/journal/sd-journal.c +++ b/src/journal/sd-journal.c @@ -1302,7 +1302,7 @@ static int add_file(sd_journal *j, const char *prefix, const char *filename) { return r; } - log_debug("File %s got added.", f->path); + log_debug("File %s added.", f->path); check_network(j, f->fd); @@ -1330,7 +1330,7 @@ static int remove_file(sd_journal *j, const char *prefix, const char *filename) hashmap_remove(j->files, f->path); - log_debug("File %s got removed.", f->path); + log_debug("File %s removed.", f->path); if (j->current_file == f) { j->current_file = NULL; @@ -1397,7 +1397,7 @@ static int add_directory(sd_journal *j, const char *prefix, const char *dirname) path = NULL; /* avoid freeing in cleanup */ j->current_invalidate_counter ++; - log_debug("Directory %s got added.", m->path); + log_debug("Directory %s added.", m->path); } else if (m->is_root) return 0; @@ -1476,7 +1476,7 @@ static int add_root_directory(sd_journal *j, const char *p) { j->current_invalidate_counter ++; - log_debug("Root directory %s got added.", m->path); + log_debug("Root directory %s added.", m->path); } else if (!m->is_root) return 0; @@ -1537,9 +1537,9 @@ static int remove_directory(sd_journal *j, Directory *d) { hashmap_remove(j->directories_by_path, d->path); if (d->is_root) - log_debug("Root directory %s got removed.", d->path); + log_debug("Root directory %s removed.", d->path); else - log_debug("Directory %s got removed.", d->path); + log_debug("Directory %s removed.", d->path); free(d->path); free(d); diff --git a/src/shared/logs-show.c b/src/shared/logs-show.c index 116dc8a36..79a977c15 100644 --- a/src/shared/logs-show.c +++ b/src/shared/logs-show.c @@ -931,6 +931,33 @@ int add_matches_for_user_unit(sd_journal *j, const char *unit, uid_t uid) { return r; } +int add_match_this_boot(sd_journal *j) { + char match[9+32+1] = "_BOOT_ID="; + sd_id128_t boot_id; + int r; + + assert(j); + + 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)); + if (r < 0) { + log_error("Failed to add match: %s", strerror(-r)); + return r; + } + + r = sd_journal_add_conjunction(j); + if (r < 0) + return r; + + return 0; +} + int show_journal_by_unit( FILE *f, const char *unit, @@ -957,6 +984,10 @@ int show_journal_by_unit( if (r < 0) return r; + r = add_match_this_boot(j); + if (r < 0) + return r; + if (system) r = add_matches_for_unit(j, unit); else @@ -964,6 +995,8 @@ int show_journal_by_unit( if (r < 0) return r; + log_debug("Journal filter: %s", journal_make_match_string(j)); + r = show_journal(f, j, mode, n_columns, not_before, how_many, flags); if (r < 0) return r; diff --git a/src/shared/logs-show.h b/src/shared/logs-show.h index b0f93a661..c9a9ad3e9 100644 --- a/src/shared/logs-show.h +++ b/src/shared/logs-show.h @@ -37,6 +37,8 @@ int output_journal( unsigned n_columns, OutputFlags flags); +int add_match_this_boot(sd_journal *j); + int add_matches_for_unit( sd_journal *j, const char *unit);