From b6db5f69f96501aaa21e7aa9c4b6ba40548956f9 Mon Sep 17 00:00:00 2001 From: "Mr. Goblin" Date: Fri, 2 Oct 2026 22:47:33 +0300 Subject: logger library and flag to run as daemon --- lib/logger/logger.c | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 lib/logger/logger.c (limited to 'lib/logger/logger.c') diff --git a/lib/logger/logger.c b/lib/logger/logger.c new file mode 100644 index 0000000..64a6754 --- /dev/null +++ b/lib/logger/logger.c @@ -0,0 +1,78 @@ +#include +#include +#include +#include +#include +#include "logger.h" + +static int use_syslog = 0; + +void +logger_init(const char *name, int daemon_flag) +{ + use_syslog = daemon_flag; + if (use_syslog) + openlog(name, LOG_PID, LOG_DAEMON); +} + +void +logger_close(void) +{ + if (use_syslog) + closelog(); +} + +void +logger_log(enum logger_lvl level, const char *format, ...) +{ + int saved_errno = errno; + va_list vargs; + va_start(vargs, format); + if (use_syslog) { + switch (level) { + case log_lvl_info: + vsyslog(LOG_INFO, format, vargs); + break; + case log_lvl_warning: + vsyslog(LOG_WARNING, format, vargs); + break; + case log_lvl_err: + vsyslog(LOG_ERR, format, vargs); + break; + } + } else { + FILE *f = NULL; + switch (level) { + case log_lvl_info: + f = stdout; + fprintf(f, "[INFO] "); + break; + case log_lvl_warning: + f = stderr; + fprintf(f, "[WARNING] "); + break; + case log_lvl_err: + f = stderr; + fprintf(f, "[ERROR] "); + break; + default: + f = stderr; + fprintf(f, "[UNKNOWN] "); + break; + } + vfprintf(f, format, vargs); + } + errno = saved_errno; +} + +void +logger_perror(const char *s) +{ + int saved_errno = errno; + if (use_syslog) { + syslog(LOG_ERR, "%s: %s\n", s, strerror(errno)); + } else { + perror(s); + } + errno = saved_errno; +} -- cgit v1.3