X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Flog.c;h=4f9f2da2592c5a99ad96eec34ba5d7b927afbbcb;hp=94fb8233581b82cbf05f3c597b3a550fbce66e5e;hb=2cb1a60d14f869023652482a380ca7b659dcf78f;hpb=9fae33d2c8fe968e99d882728c4d072419798716 diff --git a/src/log.c b/src/log.c index 94fb82335..4f9f2da25 100644 --- a/src/log.c +++ b/src/log.c @@ -35,12 +35,15 @@ #define LOG_BUFFER_MAX 1024 static LogTarget log_target = LOG_TARGET_CONSOLE; -static int log_max_level = LOG_DEBUG; +static int log_max_level = LOG_INFO; static int console_fd = STDERR_FILENO; static int syslog_fd = -1; static int kmsg_fd = -1; +static bool show_color = false; +static bool show_location = false; + /* Akin to glibc's __abort_msg; which is private and we hance cannot * use here. */ static char *log_abort_msg = NULL; @@ -192,7 +195,6 @@ void log_set_target(LogTarget target) { assert(target < _LOG_TARGET_MAX); log_target = target; - log_open(); } void log_set_max_level(int level) { @@ -219,10 +221,11 @@ static int write_to_console( snprintf(location, sizeof(location), "(%s:%u) ", file, line); char_array_0(location); - highlight = LOG_PRI(level) <= LOG_ERR; + highlight = LOG_PRI(level) <= LOG_ERR && show_color; zero(iovec); - IOVEC_SET_STRING(iovec[n++], location); + if (show_location) + IOVEC_SET_STRING(iovec[n++], location); if (highlight) IOVEC_SET_STRING(iovec[n++], "\x1B[1;31m"); IOVEC_SET_STRING(iovec[n++], buffer); @@ -268,7 +271,7 @@ static int write_to_syslog( zero(iovec); IOVEC_SET_STRING(iovec[0], header_priority); IOVEC_SET_STRING(iovec[1], header_time); - IOVEC_SET_STRING(iovec[2], __progname); + IOVEC_SET_STRING(iovec[2], program_invocation_short_name); IOVEC_SET_STRING(iovec[3], header_pid); IOVEC_SET_STRING(iovec[4], buffer); @@ -303,7 +306,7 @@ static int write_to_kmsg( zero(iovec); IOVEC_SET_STRING(iovec[0], header_priority); - IOVEC_SET_STRING(iovec[1], __progname); + IOVEC_SET_STRING(iovec[1], program_invocation_short_name); IOVEC_SET_STRING(iovec[2], header_pid); IOVEC_SET_STRING(iovec[3], buffer); IOVEC_SET_STRING(iovec[4], "\n"); @@ -470,6 +473,15 @@ void log_parse_environment(void) { if ((e = getenv("SYSTEMD_LOG_LEVEL"))) if (log_set_max_level_from_string(e) < 0) log_warning("Failed to parse log level %s. Ignoring.", e); + + if ((e = getenv("SYSTEMD_SHOW_COLOR"))) + if (log_show_color_from_string(e) < 0) + log_warning("Failed to parse bool %s. Ignoring.", e); + + if ((e = getenv("SYSTEMD_SHOW_LOCATION"))) { + if (log_show_location_from_string(e) < 0) + log_warning("Failed to parse bool %s. Ignoring.", e); + } } LogTarget log_get_target(void) { @@ -480,6 +492,34 @@ int log_get_max_level(void) { return log_max_level; } +void log_show_color(bool b) { + show_color = b; +} + +void log_show_location(bool b) { + show_location = b; +} + +int log_show_color_from_string(const char *e) { + int t; + + if ((t = parse_boolean(e)) < 0) + return -EINVAL; + + log_show_color(t); + return 0; +} + +int log_show_location_from_string(const char *e) { + int t; + + if ((t = parse_boolean(e)) < 0) + return -EINVAL; + + log_show_location(t); + return 0; +} + static const char *const log_target_table[] = { [LOG_TARGET_CONSOLE] = "console", [LOG_TARGET_SYSLOG] = "syslog",