/* Log a message. This is a minimalistic replacement of the logging.c
implementation to avoid linking with it and other modules. */
-int log_debug_enabled = 0;
+LOG_Severity log_min_severity = LOGS_INFO;
void LOG_Message(LOG_Severity severity,
#if DEBUG > 0
csv_mode = 1;
break;
case 'd':
- log_debug_enabled = 1;
+ log_min_severity = LOGS_DEBUG;
break;
case 'h':
hostnames = optarg;
#include "util.h"
/* This is used by DEBUG_LOG macro */
-int log_debug_enabled = 0;
+LOG_Severity log_min_severity = LOGS_INFO;
/* ================================================== */
/* Flag indicating we have initialised */
static int parent_fd = 0;
-#define DEBUG_LEVEL_PRINT_FUNCTION 2
-#define DEBUG_LEVEL_PRINT_DEBUG 2
-static int debug_level = 0;
-
struct LogFile {
const char *name;
const char *banner;
time_t t;
struct tm *tm;
- if (!system_log && file_log) {
+ if (!system_log && file_log && severity >= log_min_severity) {
/* Don't clutter up syslog with timestamps and internal debugging info */
time(&t);
tm = gmtime(&t);
fprintf(file_log, "%s ", buf);
}
#if DEBUG > 0
- if (debug_level >= DEBUG_LEVEL_PRINT_FUNCTION)
+ if (log_min_severity <= LOGS_DEBUG)
fprintf(file_log, "%s:%d:(%s) ", filename, line_number, function_name);
#endif
}
case LOGS_INFO:
case LOGS_WARN:
case LOGS_ERR:
- log_message(0, severity, buf);
+ if (severity >= log_min_severity)
+ log_message(0, severity, buf);
break;
case LOGS_FATAL:
- log_message(1, severity, buf);
+ if (severity >= log_min_severity)
+ log_message(1, severity, buf);
/* Send the message also to the foreground process if it is
still running, or stderr if it is still open */
/* ================================================== */
-void LOG_SetDebugLevel(int level)
+void LOG_SetMinSeverity(LOG_Severity severity)
{
- debug_level = level;
- if (level >= DEBUG_LEVEL_PRINT_DEBUG) {
- log_debug_enabled = 1;
- }
+ log_min_severity = CLAMP(LOGS_DEBUG, severity, LOGS_FATAL);
}
/* ================================================== */
#include "sysincl.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. */
#define DEBUG_LOG(...) \
do { \
- if (DEBUG && log_debug_enabled) \
+ if (DEBUG && log_min_severity == LOGS_DEBUG) \
LOG_MESSAGE(LOGS_DEBUG, __VA_ARGS__); \
} while (0)
/* Definition of severity */
typedef enum {
- LOGS_INFO,
+ LOGS_DEBUG = -1,
+ LOGS_INFO = 0,
LOGS_WARN,
LOGS_ERR,
LOGS_FATAL,
- LOGS_DEBUG
} LOG_Severity;
+/* Minimum severity of messages to be logged */
+extern LOG_Severity log_min_severity;
+
/* Init function */
extern void LOG_Initialise(void);
extern void LOG_Message(LOG_Severity severity, const char *format, ...);
#endif
-/* Set debug level:
- 0, 1 - only non-debug messages are logged
- 2 - debug messages are logged too, all messages are prefixed with
- filename, line, and function name
- */
-extern void LOG_SetDebugLevel(int level);
+/* Set the minimum severity of a message to be logged or printed to terminal.
+ If the severity is LOGS_DEBUG and DEBUG is enabled, all messages will be
+ prefixed with the filename, line number, and function name. */
+extern void LOG_SetMinSeverity(LOG_Severity severity);
/* Log messages to a file instead of stderr, or stderr again if NULL */
extern void LOG_OpenFileLog(const char *log_file);
LOG_OpenSystemLog();
}
- LOG_SetDebugLevel(debug);
+ LOG_SetMinSeverity(debug >= 2 ? LOGS_DEBUG : LOGS_INFO);
LOG(LOGS_INFO, "chronyd version %s starting (%s)", CHRONY_VERSION, CHRONYD_FEATURES);