mirror of
https://github.com/systemd/systemd.git
synced 2024-12-22 17:35:35 +03:00
journal/cat: allow connecting output to specific journal namespace
This commit is contained in:
parent
d4923a13b7
commit
45bcab66a9
@ -123,6 +123,17 @@
|
|||||||
boolean argument.</para></listitem>
|
boolean argument.</para></listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term><option>--namespace=</option></term>
|
||||||
|
|
||||||
|
<listitem><para>Specifies the journal namespace to which the standard IO should be connected.
|
||||||
|
For details about journal namespaces, see
|
||||||
|
<citerefentry><refentrytitle>systemd-journald.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<xi:include href="version-info.xml" xpointer="v256"/></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
</variablelist>
|
</variablelist>
|
||||||
|
|
||||||
</refsect1>
|
</refsect1>
|
||||||
@ -130,8 +141,7 @@
|
|||||||
<refsect1>
|
<refsect1>
|
||||||
<title>Exit status</title>
|
<title>Exit status</title>
|
||||||
|
|
||||||
<para>On success, 0 is returned, a non-zero failure code
|
<para>On success, 0 is returned, a non-zero failure code otherwise.</para>
|
||||||
otherwise.</para>
|
|
||||||
</refsect1>
|
</refsect1>
|
||||||
|
|
||||||
<refsect1>
|
<refsect1>
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
#include "terminal-util.h"
|
#include "terminal-util.h"
|
||||||
|
|
||||||
static const char *arg_identifier = NULL;
|
static const char *arg_identifier = NULL;
|
||||||
|
static const char *arg_namespace = NULL;
|
||||||
static int arg_priority = LOG_INFO;
|
static int arg_priority = LOG_INFO;
|
||||||
static int arg_stderr_priority = -1;
|
static int arg_stderr_priority = -1;
|
||||||
static bool arg_level_prefix = true;
|
static bool arg_level_prefix = true;
|
||||||
@ -44,6 +45,7 @@ static int help(void) {
|
|||||||
" -p --priority=PRIORITY Set priority value (0..7)\n"
|
" -p --priority=PRIORITY Set priority value (0..7)\n"
|
||||||
" --stderr-priority=PRIORITY Set priority value (0..7) used for stderr\n"
|
" --stderr-priority=PRIORITY Set priority value (0..7) used for stderr\n"
|
||||||
" --level-prefix=BOOL Control whether level prefix shall be parsed\n"
|
" --level-prefix=BOOL Control whether level prefix shall be parsed\n"
|
||||||
|
" --namespace=NAMESPACE Connect to specified journal namespace\n"
|
||||||
"\nSee the %s for details.\n",
|
"\nSee the %s for details.\n",
|
||||||
program_invocation_short_name,
|
program_invocation_short_name,
|
||||||
ansi_highlight(),
|
ansi_highlight(),
|
||||||
@ -58,7 +60,8 @@ static int parse_argv(int argc, char *argv[]) {
|
|||||||
enum {
|
enum {
|
||||||
ARG_VERSION = 0x100,
|
ARG_VERSION = 0x100,
|
||||||
ARG_STDERR_PRIORITY,
|
ARG_STDERR_PRIORITY,
|
||||||
ARG_LEVEL_PREFIX
|
ARG_LEVEL_PREFIX,
|
||||||
|
ARG_NAMESPACE,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct option options[] = {
|
static const struct option options[] = {
|
||||||
@ -68,6 +71,7 @@ static int parse_argv(int argc, char *argv[]) {
|
|||||||
{ "priority", required_argument, NULL, 'p' },
|
{ "priority", required_argument, NULL, 'p' },
|
||||||
{ "stderr-priority", required_argument, NULL, ARG_STDERR_PRIORITY },
|
{ "stderr-priority", required_argument, NULL, ARG_STDERR_PRIORITY },
|
||||||
{ "level-prefix", required_argument, NULL, ARG_LEVEL_PREFIX },
|
{ "level-prefix", required_argument, NULL, ARG_LEVEL_PREFIX },
|
||||||
|
{ "namespace", required_argument, NULL, ARG_NAMESPACE },
|
||||||
{}
|
{}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -117,6 +121,13 @@ static int parse_argv(int argc, char *argv[]) {
|
|||||||
return r;
|
return r;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case ARG_NAMESPACE:
|
||||||
|
if (isempty(optarg))
|
||||||
|
arg_namespace = NULL;
|
||||||
|
else
|
||||||
|
arg_namespace = optarg;
|
||||||
|
break;
|
||||||
|
|
||||||
case '?':
|
case '?':
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
@ -137,12 +148,12 @@ static int run(int argc, char *argv[]) {
|
|||||||
if (r <= 0)
|
if (r <= 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
outfd = sd_journal_stream_fd(arg_identifier, arg_priority, arg_level_prefix);
|
outfd = sd_journal_stream_fd_with_namespace(arg_namespace, arg_identifier, arg_priority, arg_level_prefix);
|
||||||
if (outfd < 0)
|
if (outfd < 0)
|
||||||
return log_error_errno(outfd, "Failed to create stream fd: %m");
|
return log_error_errno(outfd, "Failed to create stream fd: %m");
|
||||||
|
|
||||||
if (arg_stderr_priority >= 0 && arg_stderr_priority != arg_priority) {
|
if (arg_stderr_priority >= 0 && arg_stderr_priority != arg_priority) {
|
||||||
errfd = sd_journal_stream_fd(arg_identifier, arg_stderr_priority, arg_level_prefix);
|
errfd = sd_journal_stream_fd_with_namespace(arg_namespace, arg_identifier, arg_stderr_priority, arg_level_prefix);
|
||||||
if (errfd < 0)
|
if (errfd < 0)
|
||||||
return log_error_errno(errfd, "Failed to create stream fd: %m");
|
return log_error_errno(errfd, "Failed to create stream fd: %m");
|
||||||
}
|
}
|
||||||
|
15
test/units/testsuite-04.cat.sh
Executable file
15
test/units/testsuite-04.cat.sh
Executable file
@ -0,0 +1,15 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# SPDX-License-Identifier: LGPL-2.1-or-later
|
||||||
|
set -eux
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
systemctl enable --now systemd-journald@cat-test.socket
|
||||||
|
|
||||||
|
systemd-cat --namespace cat-test env CAT_TEST_RESULT=1
|
||||||
|
|
||||||
|
timeout 30 bash -c "until systemctl -q is-active systemd-journald@cat-test.service; do sleep .5; done"
|
||||||
|
|
||||||
|
journalctl --namespace cat-test --grep "JOURNAL_STREAM="
|
||||||
|
journalctl --namespace cat-test --grep "CAT_TEST_RESULT=1"
|
||||||
|
|
||||||
|
systemctl disable --now systemd-journald@cat-test.socket
|
Loading…
Reference in New Issue
Block a user