[systemd-commits] src/shared

Kay Sievers kay at kemper.freedesktop.org
Sun Oct 20 12:28:58 PDT 2013


 src/shared/log.h |   18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

New commits:
commit 87ff6b1c2a607c47b2374c5be41ac01302714979
Author: Kay Sievers <kay at vrfy.org>
Date:   Sun Oct 20 21:17:55 2013 +0200

    log: avoid calling the logging functions for log levels above the current maximum
    
    Messages with log levels above the current maximum log level will be dropped
    inside log_meta(). But to be able to call the function, all parameters for
    the function need to be provided. This can easily get expensive, if values
    need to be calculated or functions are used in parameters.
    
    Avoid all useless work by checking inside the macro, before we look
    at any parameters passed to the logging functions.

diff --git a/src/shared/log.h b/src/shared/log.h
index 9ce99ef..ac20a98 100644
--- a/src/shared/log.h
+++ b/src/shared/log.h
@@ -136,13 +136,17 @@ _noreturn_ void log_assert_failed_unreachable(
                 int line,
                 const char *func);
 
-#define log_full(level, ...) log_meta(level,   __FILE__, __LINE__, __func__, __VA_ARGS__)
-
-#define log_debug(...)   log_meta(LOG_DEBUG,   __FILE__, __LINE__, __func__, __VA_ARGS__)
-#define log_info(...)    log_meta(LOG_INFO,    __FILE__, __LINE__, __func__, __VA_ARGS__)
-#define log_notice(...)  log_meta(LOG_NOTICE,  __FILE__, __LINE__, __func__, __VA_ARGS__)
-#define log_warning(...) log_meta(LOG_WARNING, __FILE__, __LINE__, __func__, __VA_ARGS__)
-#define log_error(...)   log_meta(LOG_ERR,     __FILE__, __LINE__, __func__, __VA_ARGS__)
+#define log_full(level, ...) \
+do { \
+        if (log_get_max_level() >= (level)) \
+                log_meta(LOG_INFO, __FILE__, __LINE__, __func__, __VA_ARGS__); \
+} while (0)
+
+#define log_debug(...)   log_full(LOG_DEBUG,   __VA_ARGS__)
+#define log_info(...)    log_full(LOG_INFO,    __VA_ARGS__)
+#define log_notice(...)  log_full(LOG_NOTICE,  __VA_ARGS__)
+#define log_warning(...) log_full(LOG_WARNING, __VA_ARGS__)
+#define log_error(...)   log_full(LOG_ERR,     __VA_ARGS__)
 
 #define log_struct(level, ...) log_struct_internal(level, __FILE__, __LINE__, __func__, __VA_ARGS__)
 



More information about the systemd-commits mailing list