X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fshared%2Flog.c;h=1c589ac46752e56dcb1254982a43b90c8eed10ac;hb=f9aa5413807e163df49171793eb93a230cd7b955;hp=2bac998bcdbe3dac9886a2210b71de51f4ad39c0;hpb=c1dc6153c9426d98ddbcd8b5077f397f18ff1da7;p=elogind.git diff --git a/src/shared/log.c b/src/shared/log.c index 2bac998bc..1c589ac46 100644 --- a/src/shared/log.c +++ b/src/shared/log.c @@ -871,28 +871,47 @@ int log_set_max_level_from_string(const char *e) { return 0; } -void log_parse_environment(void) { - _cleanup_free_ char *line = NULL; - const char *e; - int r; +static int parse_proc_cmdline_item(const char *key, const char *value) { - r = proc_cmdline(&line); - if (r < 0) - log_warning("Failed to read /proc/cmdline. Ignoring: %s", strerror(-r)); - else if (r > 0) { - const char *word, *state; - size_t l; + /* + * The systemd.log_xyz= settings are parsed by all tools, and + * so is "debug". + * + * However, "quiet" is only parsed by PID 1! + */ - FOREACH_WORD_QUOTED(word, l, line, state) { - if (l == 5 && startswith(word, "debug")) { - log_set_max_level(LOG_DEBUG); - break; - } - } - if (!isempty(state)) - log_warning("Trailing garbage and the end of kernel commandline, ignoring."); + if (streq(key, "debug") && !value) + log_set_max_level(LOG_DEBUG); + + else if (streq(key, "systemd.log_target") && value) { + + if (log_set_target_from_string(value) < 0) + log_warning("Failed to parse log target '%s'. Ignoring.", value); + + } else if (streq(key, "systemd.log_level") && value) { + + if (log_set_max_level_from_string(value) < 0) + log_warning("Failed to parse log level '%s'. Ignoring.", value); + + } else if (streq(key, "systemd.log_color") && value) { + + if (log_show_color_from_string(value) < 0) + log_warning("Failed to parse log color setting '%s'. Ignoring.", value); + + } else if (streq(key, "systemd.log_location") && value) { + + if (log_show_location_from_string(value) < 0) + log_warning("Failed to parse log location setting '%s'. Ignoring.", value); } + return 0; +} + +void log_parse_environment(void) { + const char *e; + + (void) parse_proc_cmdline(parse_proc_cmdline_item); + e = secure_getenv("SYSTEMD_LOG_TARGET"); if (e && log_set_target_from_string(e) < 0) log_warning("Failed to parse log target '%s'. Ignoring.", e);