From 086891e5c119abb9854237fc32e736fe2d67234c Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Thu, 27 Nov 2014 19:48:02 +0100 Subject: log: add an "error" parameter to all low-level logging calls and intrdouce log_error_errno() as log calls that take error numbers This change has two benefits: - The format string %m will now resolve to the specified error (or to errno if the specified error is 0. This allows getting rid of a ton of strerror() invocations, a function that is not thread-safe. - The specified error can be passed to the journal in the ERRNO= field. Now of course, we just need somebody to convert all cases of this: log_error("Something happened: %s", strerror(-r)); into thus: log_error_errno(-r, "Something happened: %m"); --- src/core/kmod-setup.c | 2 +- src/core/selinux-access.c | 2 +- src/core/unit.h | 4 +++- 3 files changed, 5 insertions(+), 3 deletions(-) (limited to 'src/core') diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c index 4795a47eb4..50af7932f6 100644 --- a/src/core/kmod-setup.c +++ b/src/core/kmod-setup.c @@ -44,7 +44,7 @@ static void systemd_kmod_log( /* library logging is enabled at debug only */ DISABLE_WARNING_FORMAT_NONLITERAL; - log_metav(LOG_DEBUG, file, line, fn, format, args); + log_metav(LOG_DEBUG, 0, file, line, fn, format, args); REENABLE_WARNING; } diff --git a/src/core/selinux-access.c b/src/core/selinux-access.c index a50dec3961..b3835d59a5 100644 --- a/src/core/selinux-access.c +++ b/src/core/selinux-access.c @@ -112,7 +112,7 @@ _printf_(2, 3) static int log_callback(int type, const char *fmt, ...) { #endif va_start(ap, fmt); - log_metav(LOG_USER | LOG_INFO, __FILE__, __LINE__, __FUNCTION__, fmt, ap); + log_metav(LOG_USER | LOG_INFO, 0, __FILE__, __LINE__, __FUNCTION__, fmt, ap); va_end(ap); return 0; diff --git a/src/core/unit.h b/src/core/unit.h index 8b24272245..54ba11a889 100644 --- a/src/core/unit.h +++ b/src/core/unit.h @@ -596,7 +596,9 @@ UnitActiveState unit_active_state_from_string(const char *s) _pure_; /* Macros which append UNIT= or USER_UNIT= to the message */ -#define log_full_unit(level, unit, ...) log_meta_object(level, __FILE__, __LINE__, __func__, getpid() == 1 ? "UNIT=" : "USER_UNIT=", unit, __VA_ARGS__) +#define log_full_unit(level, unit, ...) log_meta_object(level, 0, __FILE__, __LINE__, __func__, getpid() == 1 ? "UNIT=" : "USER_UNIT=", unit, __VA_ARGS__) +#define log_full_unit_errno(level, error, unit, ...) log_meta_object(level, error, __FILE__, __LINE__, __func__, getpid() == 1 ? "UNIT=" : "USER_UNIT=", unit, __VA_ARGS__) + #define log_debug_unit(unit, ...) log_full_unit(LOG_DEBUG, unit, __VA_ARGS__) #define log_info_unit(unit, ...) log_full_unit(LOG_INFO, unit, __VA_ARGS__) #define log_notice_unit(unit, ...) log_full_unit(LOG_NOTICE, unit, __VA_ARGS__) -- cgit v1.2.3-54-g00ecf