journalctl: show systemd messages about unit for -u

journalctl -u unit is not very useful, because it doesn't show
systemd messages about starting, stopping, coredumps, etc,
like systemctl status unit does. Make it show the same
information using the same rules.

If somebody really want to see just messages from by the unit,
it is easy enough to use _SYSTEMD_UNIT=...
parent 886a64fe
......@@ -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>
......
......@@ -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;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment