mirror of
https://github.com/systemd/systemd.git
synced 2025-01-11 09:18:07 +03:00
journalctl: add --unit=/-u to match by unit name
This applies unit_name_mangle() to the specified unit names and hence can handle weird characters nicely and will add unit suffixes as necessary.
This commit is contained in:
parent
78fbaacac0
commit
c3f60ec54d
@ -257,7 +257,56 @@
|
||||
<term><option>-b</option></term>
|
||||
|
||||
<listitem><para>Show data only from
|
||||
current boot.</para></listitem>
|
||||
current boot. This will add a match
|
||||
for <literal>_BOOT_ID=</literal> for
|
||||
the current boot ID of the
|
||||
kernel.</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><option>--unit=</option></term>
|
||||
<term><option>-u</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>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><option>-p</option></term>
|
||||
<term><option>--priority=</option></term>
|
||||
|
||||
<listitem><para>Filter output by
|
||||
message priorities or priority
|
||||
ranges. Takes either a single numeric
|
||||
or textual log level (i.e. between
|
||||
0/<literal>emerg</literal> and
|
||||
7/<literal>debug</literal>), or a
|
||||
range of numeric/text log levels in
|
||||
the form FROM..TO. The log levels are
|
||||
the usual syslog log levels as
|
||||
documented in
|
||||
<citerefentry><refentrytitle>syslog</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
|
||||
i.e. <literal>emerg</literal> (0),
|
||||
<literal>alert</literal> (1),
|
||||
<literal>crit</literal> (2),
|
||||
<literal>err</literal> (3),
|
||||
<literal>warning</literal> (4),
|
||||
<literal>notice</literal> (5),
|
||||
<literal>info</literal> (6),
|
||||
<literal>debug</literal> (7). If a
|
||||
single log level is specified all
|
||||
messages with this log level or a
|
||||
lower (hence more important) log level
|
||||
are shown. If a range is specified all
|
||||
messages within the range are shown,
|
||||
including both the start and the end
|
||||
value of the range. This will add
|
||||
<literal>PRIORITY=</literal> matches
|
||||
for the specified
|
||||
priorities.</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
@ -312,38 +361,6 @@
|
||||
paths.</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><option>-p</option></term>
|
||||
<term><option>--priority=</option></term>
|
||||
|
||||
<listitem><para>Filter output by
|
||||
message priorities or priority
|
||||
ranges. Takes either a single numeric
|
||||
or textual log level (i.e. between
|
||||
0/<literal>emerg</literal> and
|
||||
7/<literal>debug</literal>), or a
|
||||
range of numeric/text log levels in
|
||||
the form FROM..TO. The log levels are
|
||||
the usual syslog log levels as
|
||||
documented in
|
||||
<citerefentry><refentrytitle>syslog</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
|
||||
i.e. <literal>emerg</literal> (0),
|
||||
<literal>alert</literal> (1),
|
||||
<literal>crit</literal> (2),
|
||||
<literal>err</literal> (3),
|
||||
<literal>warning</literal> (4),
|
||||
<literal>notice</literal> (5),
|
||||
<literal>info</literal> (6),
|
||||
<literal>debug</literal> (7). If a
|
||||
single log level is specified all
|
||||
messages with this log level or a
|
||||
lower (hence more important) log level
|
||||
are shown. If a range is specified all
|
||||
messages within the range are shown,
|
||||
including both the start and the end
|
||||
value of the range.</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><option>--new-id128</option></term>
|
||||
|
||||
|
@ -51,6 +51,7 @@
|
||||
#include "journal-authenticate.h"
|
||||
#include "journal-qrcode.h"
|
||||
#include "fsprg.h"
|
||||
#include "unit-name.h"
|
||||
|
||||
#define DEFAULT_FSS_INTERVAL_USEC (15*USEC_PER_MINUTE)
|
||||
|
||||
@ -72,6 +73,7 @@ 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 enum {
|
||||
ACTION_SHOW,
|
||||
@ -88,21 +90,22 @@ static int help(void) {
|
||||
"Send control commands to or query the journal.\n\n"
|
||||
" -h --help Show this help\n"
|
||||
" --version Show package version\n"
|
||||
" --no-pager Do not pipe output into a pager\n"
|
||||
" -a --all Show all fields, including long and unprintable\n"
|
||||
" -c --cursor=CURSOR Start showing entries from specified cursor\n"
|
||||
" --since=DATE Start showing entries newer or of the specified date\n"
|
||||
" --until=DATE Stop showing entries older or of the specified date\n"
|
||||
" -b --this-boot Show data only from current boot\n"
|
||||
" -u --unit=UNIT Show data only from the specified unit\n"
|
||||
" -p --priority=RANGE Show only messages within the specified priority range\n\n"
|
||||
" -f --follow Follow journal\n"
|
||||
" -n --lines[=INTEGER] Number of journal entries to show\n"
|
||||
" --no-tail Show all lines, even in follow mode\n"
|
||||
" -o --output=STRING Change journal output mode (short, short-monotonic,\n"
|
||||
" verbose, export, json, json-pretty, json-sse, cat)\n"
|
||||
" -a --all Show all fields, including long and unprintable\n"
|
||||
" -q --quiet Don't show privilege warning\n"
|
||||
" --no-pager Do not pipe output into a pager\n"
|
||||
" -m --merge Show entries from all available journals\n"
|
||||
" -b --this-boot Show data only from current boot\n"
|
||||
" -D --directory=PATH Show journal files from directory\n"
|
||||
" -p --priority=RANGE Show only messages within the specified priority range\n\n"
|
||||
"Commands:\n"
|
||||
" --new-id128 Generate a new 128 Bit ID\n"
|
||||
" --header Show journal header information\n"
|
||||
@ -159,6 +162,7 @@ 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 },
|
||||
{ "unit", required_argument, NULL, 'u' },
|
||||
{ NULL, 0, NULL, 0 }
|
||||
};
|
||||
|
||||
@ -167,7 +171,7 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
assert(argc >= 0);
|
||||
assert(argv);
|
||||
|
||||
while ((c = getopt_long(argc, argv, "hfo:an::qmbD:p:c:", options, NULL)) >= 0) {
|
||||
while ((c = getopt_long(argc, argv, "hfo:an::qmbD:p:c:u:", options, NULL)) >= 0) {
|
||||
|
||||
switch (c) {
|
||||
|
||||
@ -357,6 +361,10 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
arg_until_set = true;
|
||||
break;
|
||||
|
||||
case 'u':
|
||||
arg_unit = optarg;
|
||||
break;
|
||||
|
||||
case '?':
|
||||
return -EINVAL;
|
||||
|
||||
@ -506,6 +514,32 @@ static int add_this_boot(sd_journal *j) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int add_unit(sd_journal *j) {
|
||||
_cleanup_free_ char *m = NULL, *u = NULL;
|
||||
int r;
|
||||
|
||||
assert(j);
|
||||
|
||||
if (isempty(arg_unit))
|
||||
return 0;
|
||||
|
||||
u = unit_name_mangle(arg_unit);
|
||||
if (!u)
|
||||
return log_oom();
|
||||
|
||||
m = strappend("_SYSTEMD_UNIT=", 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));
|
||||
return r;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int add_priorities(sd_journal *j) {
|
||||
char match[] = "PRIORITY=0";
|
||||
int i, r;
|
||||
@ -851,6 +885,10 @@ int main(int argc, char *argv[]) {
|
||||
if (r < 0)
|
||||
goto finish;
|
||||
|
||||
r = add_unit(j);
|
||||
if (r < 0)
|
||||
goto finish;
|
||||
|
||||
r = add_matches(j, argv + optind);
|
||||
if (r < 0)
|
||||
goto finish;
|
||||
|
Loading…
Reference in New Issue
Block a user