summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--man/journalctl.xml26
-rw-r--r--src/journal/journalctl.c27
2 files changed, 28 insertions, 25 deletions
diff --git a/man/journalctl.xml b/man/journalctl.xml
index 4bbc288b7a..632a8134db 100644
--- a/man/journalctl.xml
+++ b/man/journalctl.xml
@@ -324,22 +324,28 @@
<term><option>-u</option></term>
<term><option>--unit=</option></term>
- <listitem><para>Show data only of the
- specified unit. This will add a match
- for <literal>_SYSTEMD_UNIT=</literal>
- for the specified
- unit.</para></listitem>
+ <listitem><para>Show messages for the
+ specified systemd unit. This will add
+ a match for messages from the unit
+ (<literal>_SYSTEMD_UNIT=</literal>)
+ and additional matches for messages
+ from systemd and messages about
+ coredumps for the specified unit.
+ </para></listitem>
</varlistentry>
<varlistentry>
<term><option>--user-unit=</option></term>
- <listitem><para>Show data only of the
+ <listitem><para>Show messages for the
specified user session unit. This will
- add a match for
- <literal>_SYSTEMD_USER_UNIT=</literal>
- for the specified
- unit.</para></listitem>
+ add a match for messages from the unit
+ (<literal>_SYSTEMD_USER_UNIT=</literal>
+ and <literal>_UID=</literal>) and
+ additional matches for messages from
+ session systemd and messages about
+ coredumps for the specified unit.
+ </para></listitem>
</varlistentry>
<varlistentry>
diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c
index 3682329e46..65114b2ff8 100644
--- a/src/journal/journalctl.c
+++ b/src/journal/journalctl.c
@@ -38,6 +38,7 @@
#include <systemd/sd-journal.h>
#include "log.h"
+#include "logs-show.h"
#include "util.h"
#include "path-util.h"
#include "build.h"
@@ -76,7 +77,7 @@ static usec_t arg_interval = DEFAULT_FSS_INTERVAL_USEC;
static usec_t arg_since, arg_until;
static bool arg_since_set = false, arg_until_set = false;
static const char *arg_unit = NULL;
-static const char *arg_unit_type = NULL;
+static bool arg_unit_system;
static const char *arg_field = NULL;
static bool arg_catalog = false;
static bool arg_reverse = false;
@@ -187,8 +188,8 @@ static int parse_argv(int argc, char *argv[]) {
{ "cursor", required_argument, NULL, 'c' },
{ "since", required_argument, NULL, ARG_SINCE },
{ "until", required_argument, NULL, ARG_UNTIL },
- { "user-unit", required_argument, NULL, ARG_USER_UNIT },
{ "unit", required_argument, NULL, 'u' },
+ { "user-unit", required_argument, NULL, ARG_USER_UNIT },
{ "field", required_argument, NULL, 'F' },
{ "catalog", no_argument, NULL, 'x' },
{ "list-catalog", no_argument, NULL, ARG_LIST_CATALOG },
@@ -419,14 +420,14 @@ static int parse_argv(int argc, char *argv[]) {
arg_until_set = true;
break;
- case ARG_USER_UNIT:
+ case 'u':
arg_unit = optarg;
- arg_unit_type = "_SYSTEMD_USER_UNIT=";
+ arg_unit_system = true;
break;
- case 'u':
+ case ARG_USER_UNIT:
arg_unit = optarg;
- arg_unit_type = "_SYSTEMD_UNIT=";
+ arg_unit_system = false;
break;
case '?':
@@ -604,16 +605,12 @@ static int add_unit(sd_journal *j) {
if (!u)
return log_oom();
- m = strappend(arg_unit_type, u);
-
- if (!m)
- return log_oom();
-
- r = sd_journal_add_match(j, m, strlen(m));
- if (r < 0) {
- log_error("Failed to add match: %s", strerror(-r));
+ 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;
- }
return 0;
}