mirror of
https://github.com/systemd/systemd.git
synced 2024-12-23 21:35:11 +03:00
journald: convert journald to use parse_proc_cmdline
This makes journald use the common option parsing functionality. One behavioural change is implemented: "systemd.journald.forward_to_syslog" is now equivalent to "systemd.journald.forward_to_syslog=1". I think it's nicer to use this way.
This commit is contained in:
parent
96287a4916
commit
5707ecf300
@ -301,22 +301,21 @@
|
|||||||
<term><varname>ForwardToConsole=</varname></term>
|
<term><varname>ForwardToConsole=</varname></term>
|
||||||
<term><varname>ForwardToWall=</varname></term>
|
<term><varname>ForwardToWall=</varname></term>
|
||||||
|
|
||||||
<listitem><para>Control whether log messages received by the
|
<listitem><para>Control whether log messages received by the journal daemon shall
|
||||||
journal daemon shall be forwarded to a traditional syslog
|
be forwarded to a traditional syslog daemon, to the kernel log buffer (kmsg), to
|
||||||
daemon, to the kernel log buffer (kmsg), to the system
|
the system console, or sent as wall messages to all logged-in users. These
|
||||||
console, or sent as wall messages to all logged-in users.
|
options take boolean arguments. If forwarding to syslog is enabled but nothing
|
||||||
These options take boolean arguments. If forwarding to syslog
|
reads messages from the socket, forwarding to syslog has no effect. By default,
|
||||||
is enabled but nothing reads messages from the socket,
|
only forwarding to wall is enabled. These settings may be overridden at boot time
|
||||||
forwarding to syslog has no effect. By default, only
|
with the kernel command line options
|
||||||
forwarding to wall is enabled. These settings may be
|
<literal>systemd.journald.forward_to_syslog</literal>,
|
||||||
overridden at boot time with the kernel command line options
|
<literal>systemd.journald.forward_to_kmsg</literal>,
|
||||||
<literal>systemd.journald.forward_to_syslog=</literal>,
|
<literal>systemd.journald.forward_to_console</literal>, and
|
||||||
<literal>systemd.journald.forward_to_kmsg=</literal>,
|
<literal>systemd.journald.forward_to_wall</literal>. If the option name is
|
||||||
<literal>systemd.journald.forward_to_console=</literal>, and
|
specified without <literal>=</literal> and the following argument, true is
|
||||||
<literal>systemd.journald.forward_to_wall=</literal>. When
|
assumed. Otherwise, the argument is parsed as a boolean. When forwarding to the
|
||||||
forwarding to the console, the TTY to log to can be changed
|
console, the TTY to log to can be changed with <varname>TTYPath=</varname>,
|
||||||
with <varname>TTYPath=</varname>, described
|
described below.</para></listitem>
|
||||||
below.</para></listitem>
|
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
|
@ -1528,85 +1528,68 @@ static int setup_signals(Server *s) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int server_parse_proc_cmdline(Server *s) {
|
static int parse_proc_cmdline_item(const char *key, const char *value, void *data) {
|
||||||
_cleanup_free_ char *line = NULL;
|
Server *s = data;
|
||||||
const char *p;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
r = proc_cmdline(&line);
|
assert(s);
|
||||||
if (r < 0) {
|
|
||||||
log_warning_errno(r, "Failed to read /proc/cmdline, ignoring: %m");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
p = line;
|
if (streq(key, "systemd.journald.forward_to_syslog")) {
|
||||||
for (;;) {
|
r = value ? parse_boolean(value) : true;
|
||||||
_cleanup_free_ char *word = NULL;
|
|
||||||
|
|
||||||
r = extract_first_word(&p, &word, NULL, 0);
|
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return log_error_errno(r, "Failed to parse journald syntax \"%s\": %m", line);
|
log_warning("Failed to parse forward to syslog switch \"%s\". Ignoring.", value);
|
||||||
|
|
||||||
if (r == 0)
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (startswith(word, "systemd.journald.forward_to_syslog=")) {
|
|
||||||
r = parse_boolean(word + 35);
|
|
||||||
if (r < 0)
|
|
||||||
log_warning("Failed to parse forward to syslog switch %s. Ignoring.", word + 35);
|
|
||||||
else
|
else
|
||||||
s->forward_to_syslog = r;
|
s->forward_to_syslog = r;
|
||||||
} else if (startswith(word, "systemd.journald.forward_to_kmsg=")) {
|
} else if (streq(key, "systemd.journald.forward_to_kmsg")) {
|
||||||
r = parse_boolean(word + 33);
|
r = value ? parse_boolean(value) : true;
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
log_warning("Failed to parse forward to kmsg switch %s. Ignoring.", word + 33);
|
log_warning("Failed to parse forward to kmsg switch \"%s\". Ignoring.", value);
|
||||||
else
|
else
|
||||||
s->forward_to_kmsg = r;
|
s->forward_to_kmsg = r;
|
||||||
} else if (startswith(word, "systemd.journald.forward_to_console=")) {
|
} else if (streq(key, "systemd.journald.forward_to_console")) {
|
||||||
r = parse_boolean(word + 36);
|
r = value ? parse_boolean(value) : true;
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
log_warning("Failed to parse forward to console switch %s. Ignoring.", word + 36);
|
log_warning("Failed to parse forward to console switch \"%s\". Ignoring.", value);
|
||||||
else
|
else
|
||||||
s->forward_to_console = r;
|
s->forward_to_console = r;
|
||||||
} else if (startswith(word, "systemd.journald.forward_to_wall=")) {
|
} else if (streq(key, "systemd.journald.forward_to_wall")) {
|
||||||
r = parse_boolean(word + 33);
|
r = value ? parse_boolean(value) : true;
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
log_warning("Failed to parse forward to wall switch %s. Ignoring.", word + 33);
|
log_warning("Failed to parse forward to wall switch \"%s\". Ignoring.", value);
|
||||||
else
|
else
|
||||||
s->forward_to_wall = r;
|
s->forward_to_wall = r;
|
||||||
} else if (startswith(word, "systemd.journald.max_level_console=")) {
|
} else if (streq(key, "systemd.journald.max_level_console") && value) {
|
||||||
r = log_level_from_string(word + 35);
|
r = log_level_from_string(value);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
log_warning("Failed to parse max level console value %s. Ignoring.", word + 35);
|
log_warning("Failed to parse max level console value \"%s\". Ignoring.", value);
|
||||||
else
|
else
|
||||||
s->max_level_console = r;
|
s->max_level_console = r;
|
||||||
} else if (startswith(word, "systemd.journald.max_level_store=")) {
|
} else if (streq(key, "systemd.journald.max_level_store") && value) {
|
||||||
r = log_level_from_string(word + 33);
|
r = log_level_from_string(value);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
log_warning("Failed to parse max level store value %s. Ignoring.", word + 33);
|
log_warning("Failed to parse max level store value \"%s\". Ignoring.", value);
|
||||||
else
|
else
|
||||||
s->max_level_store = r;
|
s->max_level_store = r;
|
||||||
} else if (startswith(word, "systemd.journald.max_level_syslog=")) {
|
} else if (streq(key, "systemd.journald.max_level_syslog") && value) {
|
||||||
r = log_level_from_string(word + 34);
|
r = log_level_from_string(value);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
log_warning("Failed to parse max level syslog value %s. Ignoring.", word + 34);
|
log_warning("Failed to parse max level syslog value \"%s\". Ignoring.", value);
|
||||||
else
|
else
|
||||||
s->max_level_syslog = r;
|
s->max_level_syslog = r;
|
||||||
} else if (startswith(word, "systemd.journald.max_level_kmsg=")) {
|
} else if (streq(key, "systemd.journald.max_level_kmsg") && value) {
|
||||||
r = log_level_from_string(word + 32);
|
r = log_level_from_string(value);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
log_warning("Failed to parse max level kmsg value %s. Ignoring.", word + 32);
|
log_warning("Failed to parse max level kmsg value \"%s\". Ignoring.", value);
|
||||||
else
|
else
|
||||||
s->max_level_kmsg = r;
|
s->max_level_kmsg = r;
|
||||||
} else if (startswith(word, "systemd.journald.max_level_wall=")) {
|
} else if (streq(key, "systemd.journald.max_level_wall") && value) {
|
||||||
r = log_level_from_string(word + 32);
|
r = log_level_from_string(value);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
log_warning("Failed to parse max level wall value %s. Ignoring.", word + 32);
|
log_warning("Failed to parse max level wall value \"%s\". Ignoring.", value);
|
||||||
else
|
else
|
||||||
s->max_level_wall = r;
|
s->max_level_wall = r;
|
||||||
} else if (startswith(word, "systemd.journald"))
|
} else if (startswith(key, "systemd.journald"))
|
||||||
log_warning("Invalid systemd.journald parameter. Ignoring.");
|
log_warning("Unknown journald kernel command line option \"%s\". Ignoring.", key);
|
||||||
}
|
|
||||||
|
|
||||||
/* do not warn about state here, since probably systemd already did */
|
/* do not warn about state here, since probably systemd already did */
|
||||||
return 0;
|
return 0;
|
||||||
@ -1917,7 +1900,7 @@ int server_init(Server *s) {
|
|||||||
journal_reset_metrics(&s->runtime_storage.metrics);
|
journal_reset_metrics(&s->runtime_storage.metrics);
|
||||||
|
|
||||||
server_parse_config_file(s);
|
server_parse_config_file(s);
|
||||||
server_parse_proc_cmdline(s);
|
parse_proc_cmdline(parse_proc_cmdline_item, s);
|
||||||
|
|
||||||
if (!!s->rate_limit_interval ^ !!s->rate_limit_burst) {
|
if (!!s->rate_limit_interval ^ !!s->rate_limit_burst) {
|
||||||
log_debug("Setting both rate limit interval and burst from "USEC_FMT",%u to 0,0",
|
log_debug("Setting both rate limit interval and burst from "USEC_FMT",%u to 0,0",
|
||||||
|
Loading…
Reference in New Issue
Block a user