logging: move check of enabled debugging to DEBUG_LOG macro

This avoids unnecessary calls to the logging function when debugging
messages are not logged. The cost is a slight increase in the size of
the binary (when compiled with debug messages).
This commit is contained in:
Miroslav Lichvar 2014-06-04 11:57:56 +02:00
parent 97ba9e4d47
commit 0dea8d97f4
2 changed files with 12 additions and 7 deletions

View file

@ -34,6 +34,9 @@
#include "mkdirpp.h"
#include "util.h"
/* This is used by DEBUG_LOG macro */
int log_debug_enabled = 0;
/* ================================================== */
/* Flag indicating we have initialised */
static int initialised = 0;
@ -148,10 +151,6 @@ void LOG_Message(LOG_Severity severity, LOG_Facility facility,
time_t t;
struct tm stm;
/* Don't write debug messages if debug level is too low */
if (debug_level < DEBUG_LEVEL_PRINT_DEBUG && severity == LOGS_DEBUG)
return;
#ifdef WINNT
#else
if (!system_log) {
@ -216,8 +215,11 @@ LOG_OpenSystemLog(void)
void LOG_SetDebugLevel(int level)
{
debug_level = level;
if (!DEBUG && level >= DEBUG_LEVEL_PRINT_DEBUG)
LOG(LOGS_WARN, LOGF_Logging, "Not compiled with full debugging support");
if (level >= DEBUG_LEVEL_PRINT_DEBUG) {
if (!DEBUG)
LOG(LOGS_WARN, LOGF_Logging, "Not compiled with full debugging support");
log_debug_enabled = 1;
}
}
/* ================================================== */

View file

@ -28,6 +28,9 @@
#ifndef GOT_LOGGING_H
#define GOT_LOGGING_H
/* Flag indicating whether debug messages are logged */
extern int log_debug_enabled;
/* Line logging macros. If the compiler is GNU C, we take advantage of
being able to get the function name also. */
@ -41,7 +44,7 @@
#define DEBUG_LOG(facility, ...) \
do { \
if (DEBUG) \
if (DEBUG && log_debug_enabled) \
LOG_Message(LOGS_DEBUG, facility, __LINE__, __FILE__, FUNCTION_NAME, __VA_ARGS__); \
} while (0)
#define LOG(severity, facility, ...) LOG_Message(severity, facility, __LINE__, __FILE__, FUNCTION_NAME, __VA_ARGS__)