diff options
author | Harald Hoyer <harald@redhat.com> | 2013-04-12 09:14:43 +0200 |
---|---|---|
committer | Harald Hoyer <harald@redhat.com> | 2013-04-17 09:15:23 +0200 |
commit | b9e405246e2f3b7149ef1f9924806441d17f004a (patch) | |
tree | 0678d6e8b0f7ba4fb93e49ac3a63241522bb06a2 | |
parent | cd34b3c6670df8a3fd49179131fe762b2dd86b01 (diff) |
journalctl: specify "--unit=" and "--user-unit" multiple times
Previously only one "--unit=" or "--user-unit" could be specified.
With this patch, journalcrtl can show multiple units.
$ journalctl -u systemd-udevd.service -u sshd.service -u crond.service -b
-- Logs begin at Sa 2013-03-23 11:08:45 CET, end at Fr 2013-04-12
09:10:22 CEST. --
Apr 12 08:41:37 lenovo systemd[1]: Started udev Kernel Device Manager.
Apr 12 08:41:37 lenovo systemd[1]: Stopped udev Kernel Device Manager.
Apr 12 08:41:38 lenovo systemd[1]: Started udev Kernel Device Manager.
Apr 12 08:41:38 lenovo crond[291]: (CRON) INFO (Syslog will be used
instead of sendmail.)
Apr 12 08:41:38 lenovo crond[291]: (CRON) INFO (running with inotify
support)
Apr 12 08:41:39 lenovo systemd[1]: Starting OpenSSH server daemon...
Apr 12 08:41:39 lenovo systemd[1]: Started OpenSSH server daemon.
Apr 12 08:41:39 lenovo sshd[355]: Server listening on 0.0.0.0 port 22.
Apr 12 08:41:39 lenovo sshd[355]: Server listening on :: port 22.
Apr 12 08:41:39 lenovo mtp-probe[373]: checking bus 1, device 8:
"/sys/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.5/1-1.5.6/1-1.5.6.2/1-1.5.6.2.1"
-rw-r--r-- | man/journalctl.xml | 6 | ||||
-rw-r--r-- | src/journal/journalctl.c | 55 |
2 files changed, 41 insertions, 20 deletions
diff --git a/man/journalctl.xml b/man/journalctl.xml index 144b54f66..91cc32260 100644 --- a/man/journalctl.xml +++ b/man/journalctl.xml @@ -332,7 +332,8 @@ (<literal>_SYSTEMD_UNIT=</literal>) and additional matches for messages from systemd and messages about - coredumps for the specified unit. + coredumps for the specified unit.</para> + <para>This parameter can be specified multiple times. </para></listitem> </varlistentry> @@ -346,7 +347,8 @@ and <literal>_UID=</literal>) and additional matches for messages from session systemd and messages about - coredumps for the specified unit. + coredumps for the specified unit.</para> + <para>This parameter can be specified multiple times. </para></listitem> </varlistentry> diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c index 2ebac405c..68be369f3 100644 --- a/src/journal/journalctl.c +++ b/src/journal/journalctl.c @@ -80,8 +80,8 @@ static usec_t arg_interval = DEFAULT_FSS_INTERVAL_USEC; #endif static usec_t arg_since, arg_until; static bool arg_since_set = false, arg_until_set = false; -static const char *arg_unit = NULL; -static bool arg_unit_system; +static char **arg_system_units = NULL; +static char **arg_user_units = NULL; static const char *arg_field = NULL; static bool arg_catalog = false; static bool arg_reverse = false; @@ -437,13 +437,15 @@ static int parse_argv(int argc, char *argv[]) { break; case 'u': - arg_unit = optarg; - arg_unit_system = true; + r = strv_extend(&arg_system_units, optarg); + if (r < 0) + return log_oom(); break; case ARG_USER_UNIT: - arg_unit = optarg; - arg_unit_system = false; + r = strv_extend(&arg_user_units, optarg); + if (r < 0) + return log_oom(); break; case '?': @@ -611,25 +613,39 @@ static int add_this_boot(sd_journal *j) { return 0; } -static int add_unit(sd_journal *j) { +static int add_units(sd_journal *j) { _cleanup_free_ char *u = NULL; int r; + char **i; assert(j); - if (isempty(arg_unit)) - return 0; + STRV_FOREACH(i, arg_system_units) { + u = unit_name_mangle(*i); + if (!u) + return log_oom(); + r = add_matches_for_unit(j, u); + if (r < 0) + return r; + r = sd_journal_add_disjunction(j); + if (r < 0) + return r; + } - u = unit_name_mangle(arg_unit); - if (!u) - return log_oom(); + STRV_FOREACH(i, arg_user_units) { + u = unit_name_mangle(*i); + if (!u) + return log_oom(); - if (arg_unit_system) - r = add_matches_for_unit(j, u); - else r = add_matches_for_user_unit(j, u, getuid()); - if (r < 0) - return r; + if (r < 0) + return r; + + r = sd_journal_add_disjunction(j); + if (r < 0) + return r; + + } r = sd_journal_add_conjunction(j); if (r < 0) @@ -1113,7 +1129,10 @@ int main(int argc, char *argv[]) { if (r < 0) return EXIT_FAILURE; - r = add_unit(j); + r = add_units(j); + strv_free(arg_system_units); + strv_free(arg_user_units); + if (r < 0) return EXIT_FAILURE; |