X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=log.c;h=b82018f28b509c15091642665aad038879ea1f05;hp=879cb537336e8461fec1c02ea79bceb79b41eeab;hb=601f6a1e820462b1df6ff632d112bef241d556b1;hpb=2d368c149b90a7b284035f8883eb0c3e64a2caab diff --git a/log.c b/log.c index 879cb5373..b82018f28 100644 --- a/log.c +++ b/log.c @@ -58,8 +58,12 @@ int log_open_kmsg(void) { if (kmsg_fd >= 0) return 0; - if ((kmsg_fd = open("/dev/kmsg", O_WRONLY|O_NOCTTY|O_CLOEXEC)) < 0) + if ((kmsg_fd = open("/dev/kmsg", O_WRONLY|O_NOCTTY|O_CLOEXEC)) < 0) { + log_info("Failed to open syslog for logging: %s", strerror(errno)); return -errno; + } + + log_info("Succesfully opened /dev/kmsg for logging."); return 0; } @@ -107,9 +111,13 @@ int log_open_syslog(void) { if (connect(syslog_fd, &sa.sa, sizeof(sa)) < 0) { r = -errno; log_close_syslog(); - return -errno; + + log_info("Failed to open syslog for logging: %s", strerror(-r)); + return r; } + log_info("Succesfully opened syslog for logging."); + return 0; } @@ -272,3 +280,51 @@ void log_meta( errno = saved_errno; } + +int log_set_target_from_string(const char *e) { + LogTarget t; + + if ((t = log_target_from_string(e)) < 0) + return -EINVAL; + + log_set_target(t); + return 0; +} + +int log_set_max_level_from_string(const char *e) { + int t; + + if ((t = log_level_from_string(e)) < 0) + return -EINVAL; + + log_set_max_level(t); + return 0; +} + +void log_parse_environment(void) { + const char *e; + + if ((e = getenv("SYSTEMD_LOG_TARGET"))) + if (log_set_target_from_string(e) < 0) + log_warning("Failed to parse log target %s. Ignoring.", e); + + 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); +} + +LogTarget log_get_target(void) { + return log_target; +} + +int log_get_max_level(void) { + return log_max_level; +} + +static const char *const log_target_table[] = { + [LOG_TARGET_CONSOLE] = "console", + [LOG_TARGET_SYSLOG] = "syslog", + [LOG_TARGET_KMSG] = "kmsg", +}; + +DEFINE_STRING_TABLE_LOOKUP(log_target, LogTarget);