From 45d3be37ab7c8a1a5c5cbf16b7daf15ee5df685e Mon Sep 17 00:00:00 2001 From: eeff Date: Fri, 28 Jan 2022 16:41:35 +0800 Subject: [PATCH] Add syslog callback in neu_log --- src/utils/log.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/src/utils/log.c b/src/utils/log.c index 411f279c..b8b0dc74 100644 --- a/src/utils/log.c +++ b/src/utils/log.c @@ -18,6 +18,7 @@ **/ #include "neu_log.h" +#include #define MAX_CALLBACKS 32 // #define LOG_USE_COLOR 1 @@ -62,6 +63,38 @@ static void stdout_callback(log_Event *ev) fflush(ev->udata); } +static void syslog_callback(log_Event *ev) +{ + int level = LOG_ERR; + switch (ev->level) { + case NEU_LOG_TRACE: + // fall through + case NEU_LOG_DEBUG: + level = LOG_DEBUG; + break; + case NEU_LOG_INFO: + level = LOG_INFO; + break; + case NEU_LOG_WARN: + level = LOG_WARNING; + break; + case NEU_LOG_ERROR: + level = LOG_ERR; + break; + case NEU_LOG_FATAL: + level = LOG_ALERT; + break; + } + char buf[1024] = { 0 }; + size_t n = snprintf(buf, sizeof(buf), "[%s] %s:%d %s: ", ev->label, + ev->file, ev->line, ev->func); + if (n < sizeof(buf)) { + // may truncate, but don't care for now + vsnprintf(buf + n, sizeof(buf) - n, ev->fmt, ev->ap); + } + syslog(level, "%s", buf); +} + static void file_callback(log_Event *ev) { char buf[64]; @@ -158,6 +191,10 @@ void log_log(int level, const char *file, int line, const char *func, va_start(ev.ap, fmt); stdout_callback(&ev); va_end(ev.ap); + + va_start(ev.ap, fmt); + syslog_callback(&ev); + va_end(ev.ap); } for (int i = 0; i < MAX_CALLBACKS && L.callbacks[i].fn; i++) {