diff options
| author | Mr. Goblin <mrgoblin@mrgoblin.net> | 2026-10-02 22:47:33 +0300 |
|---|---|---|
| committer | Mr. Goblin <mrgoblin@mrgoblin.net> | 2026-10-02 22:47:33 +0300 |
| commit | b6db5f69f96501aaa21e7aa9c4b6ba40548956f9 (patch) | |
| tree | 53fb9ca8d136f3ad3e6bb043fc0ef44cf383d3b8 /lib | |
| parent | ec49f04faa8a4f643eb8bb4a8c75ac2bff92a8f8 (diff) | |
logger library and flag to run as daemon
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/logger/Makefile | 54 | ||||
| -rw-r--r-- | lib/logger/logger.c | 78 | ||||
| -rw-r--r-- | lib/logger/logger.h | 21 |
3 files changed, 153 insertions, 0 deletions
diff --git a/lib/logger/Makefile b/lib/logger/Makefile new file mode 100644 index 0000000..e5e7682 --- /dev/null +++ b/lib/logger/Makefile @@ -0,0 +1,54 @@ +# Copyright (c) 2026, Mr. Goblin +# +# SPDX-License-Identifier: BSD-2-Clause + +# all 3 values commented, using make's default or export CC +# CC = cc -fno-caret-diagnostics -fno-color-diagnostics +# CC = gcc -fno-diagnostics-show-caret -fdiagnostics-color=never +# CC = gcc + +CFLAGS = -Wall -Wextra -pedantic -std=gnu89 +ARFLAGS = rcs + +# DEBUG = -g +# DEBUG = -ggdb +DEBUG = + +# STATIC = -static +STATIC = -static -s +# STATIC = + +PROG_NAME=liblogger +VER=0.0.0 +DIST_NAME=$(PROG_NAME)-$(VER) + + +MAINBINARIES = liblogger.a + +.SUFFIXES: +.SUFFIXES: .c .o +.PHONY: all clean dist ctags rebuild + +all: $(MAINBINARIES) + +ctags: + ctags *.c *.h *.cpp *.hpp + +dist: + git archive --format=tar --prefix=$(DIST_NAME)/ HEAD | \ + bzip2 > $(DIST_NAME).tar.bz2 + +clean: + rm -f $(MAINBINARIES) *.o *.test tags $(DIST_NAME) + +rebuild: clean all + +.c.o: + $(CC) $(DEBUG) $(CFLAGS) -c $< -o $@ + + +LIBLOGGER_OBJECTS = logger.o +LIBLOGGER_LIBS = -lc + +liblogger.a: $(LIBLOGGER_OBJECTS) + $(AR) $(ARFLAGS) $@ $(LIBLOGGER_OBJECTS) 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 <syslog.h> +#include <stdarg.h> +#include <stdio.h> +#include <errno.h> +#include <string.h> +#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; +} diff --git a/lib/logger/logger.h b/lib/logger/logger.h new file mode 100644 index 0000000..6c9ed7d --- /dev/null +++ b/lib/logger/logger.h @@ -0,0 +1,21 @@ +#ifndef LIB_LOGGER_H_SENTRY +#define LIB_LOGGER_H_SENTRY +#ifdef __cplusplus +extern "C" { +#endif + +enum logger_lvl { + log_lvl_info, + log_lvl_warning, + log_lvl_err +}; + +void logger_init(const char *name, int daemon_flag); +void logger_close(void); +void logger_log(enum logger_lvl, const char *format, ...); +void logger_perror(const char *s); + +#ifdef __cplusplus +} +#endif +#endif /* LIB_LOGGER_H_SENTRY */ |
