diff options
author | Mikhail Burakov <mburakov@mailbox.org> | 2022-12-25 13:51:30 +0100 |
---|---|---|
committer | Mikhail Burakov <mburakov@mailbox.org> | 2022-12-25 13:51:30 +0100 |
commit | 16c0e4a3c8de3c96d29fd495c1aded36d8935759 (patch) | |
tree | 688c88b1bf6ccd2a2b9957a07af767ff4925c4cf | |
parent | d58fcf64d9e7a3f309a706ce6a81eb9a41eb5348 (diff) |
Use syslog for logging facilities
-rw-r--r-- | utils.c | 27 | ||||
-rw-r--r-- | utils.h | 18 |
2 files changed, 32 insertions, 13 deletions
@@ -18,26 +18,33 @@ #include "utils.h" #include <stdarg.h> -#include <stdio.h> -#include <stdlib.h> +#include <syslog.h> #include <threads.h> #include <time.h> static once_flag g_once_flag = ONCE_FLAG_INIT; -static mtx_t g_log_mutex; -static void InitLogMutex() { - if (mtx_init(&g_log_mutex, mtx_plain) != thrd_success) abort(); +static void InitLogging() { openlog(NULL, LOG_PERROR, LOG_USER); } + +static int LogLevelToPriority(enum LogLevel log_level) { + switch (log_level) { + case kLogLevelDebug: + return LOG_DEBUG; + case kLogLevelInfo: + return LOG_INFO; + case kLogLevelWarning: + return LOG_WARNING; + case kLogLevelError: + return LOG_ERR; + } } -void LogImpl(const char* fmt, ...) { - call_once(&g_once_flag, InitLogMutex); - int status = mtx_lock(&g_log_mutex); +void LogImpl(enum LogLevel log_level, const char* fmt, ...) { + call_once(&g_once_flag, InitLogging); va_list args; va_start(args, fmt); - vfprintf(stderr, fmt, args); + vsyslog(LogLevelToPriority(log_level), fmt, args); va_end(args); - if (status == thrd_success) mtx_unlock(&g_log_mutex); } unsigned long long MillisNow(void) { @@ -24,11 +24,23 @@ extern "C" { #define STR_IMPL(op) #op #define STR(op) STR_IMPL(op) -#define LOG(fmt, ...) \ - LogImpl(__FILE__ ":" STR(__LINE__) " " fmt "\n", ##__VA_ARGS__) +#define LOG(log_level, fmt, ...) \ + LogImpl(level, __FILE__ ":" STR(__LINE__) " " fmt "\n", ##__VA_ARGS__) +#define LOGD(...) LOG(kLogLevelDebug, __VA_ARGS__) +#define LOGI(...) LOG(kLogLevelInfo, __VA_ARGS__) +#define LOGW(...) LOG(kLogLevelWarning, __VA_ARGS__) +#define LOGE(...) LOG(kLogLevelError, __VA_ARGS__) #define LENGTH(op) (sizeof(op) / sizeof *(op)) -void LogImpl(const char* fmt, ...) __attribute__((format(printf, 1, 2))); +enum LogLevel { + kLogLevelDebug = 0, + kLogLevelInfo, + kLogLevelWarning, + kLogLevelError, +}; + +void LogImpl(enum LogLevel log_level, const char* fmt, ...) + __attribute__((format(printf, 2, 3))); unsigned long long MillisNow(void); #ifdef __cplusplus |