From 73225189596eae50b828670975509cfad7ba60fb Mon Sep 17 00:00:00 2001 From: Federico Angelilli Date: Wed, 20 Mar 2024 23:37:44 +0100 Subject: Refactor any_log.h --- any_log.h | 96 +++++++++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 63 insertions(+), 33 deletions(-) (limited to 'any_log.h') diff --git a/any_log.h b/any_log.h index 63461f1..88954ce 100644 --- a/any_log.h +++ b/any_log.h @@ -2,14 +2,14 @@ #define ANY_LOG_INCLUDE typedef enum { - LOG_PANIC, - LOG_ERROR, - LOG_WARN, - LOG_INFO, - LOG_DEBUG, - LOG_TRACE, - LOG_ALL, -} log_level_t; + ANY_LOG_PANIC, + ANY_LOG_ERROR, + ANY_LOG_WARN, + ANY_LOG_INFO, + ANY_LOG_DEBUG, + ANY_LOG_TRACE, + ANY_LOG_ALL, +} any_log_level_t; // The value of ANY_LOG_MODULE is used to indicate the current module. // By default it is defined as __FILE__, so that it will coincide with the @@ -32,33 +32,33 @@ typedef enum { #define log_panic(...) \ do { \ - log_generic(LOG_PANIC, ANY_LOG_MODULE, ANY_LOG_FUNC, __VA_ARGS__); \ - log_exit(ANY_LOG_MODULE, ANY_LOG_FUNC); \ + any_log_format(ANY_LOG_PANIC, ANY_LOG_MODULE, ANY_LOG_FUNC, __VA_ARGS__); \ + any_log_exit(ANY_LOG_MODULE, ANY_LOG_FUNC); \ } while (0) #define log_error(...) \ - log_generic(LOG_ERROR, ANY_LOG_MODULE, ANY_LOG_FUNC, __VA_ARGS__) + any_log_format(ANY_LOG_ERROR, ANY_LOG_MODULE, ANY_LOG_FUNC, __VA_ARGS__) #define log_warn(...) \ - log_generic(LOG_WARN, ANY_LOG_MODULE, ANY_LOG_FUNC, __VA_ARGS__) + any_log_format(ANY_LOG_WARN, ANY_LOG_MODULE, ANY_LOG_FUNC, __VA_ARGS__) #define log_info(...) \ - log_generic(LOG_INFO, ANY_LOG_MODULE, ANY_LOG_FUNC, __VA_ARGS__) + any_log_format(ANY_LOG_INFO, ANY_LOG_MODULE, ANY_LOG_FUNC, __VA_ARGS__) #define log_debug(...) \ - log_generic(LOG_DEBUG, ANY_LOG_MODULE, ANY_LOG_FUNC, __VA_ARGS__) + any_log_format(ANY_LOG_DEBUG, ANY_LOG_MODULE, ANY_LOG_FUNC, __VA_ARGS__) #ifdef ANY_LOG_NO_TRACE #define log_trace(...) #else #define log_trace(...) \ - log_generic(LOG_TRACE, ANY_LOG_MODULE, ANY_LOG_FUNC, __VA_ARGS__) + any_log_format(ANY_LOG_TRACE, ANY_LOG_MODULE, ANY_LOG_FUNC, __VA_ARGS__) #endif -void log_exit(const char *module, const char *func); +void any_log_exit(const char *module, const char *func); -void log_generic(log_level_t level, const char *module, - const char *func, const char *format, ...); +void any_log_format(any_log_level_t level, const char *module, + const char *func, const char *format, ...); #endif @@ -69,48 +69,78 @@ void log_generic(log_level_t level, const char *module, #include #include -// Using log_panic results in a call to log_exit, which should terminate +#ifndef ANY_LOG_PANIC_STRING +#define ANY_LOG_PANIC_STRING "panic" +#endif + +#ifndef ANY_LOG_ERROR_STRING +#define ANY_LOG_ERROR_STRING "error" +#endif + +#ifndef ANY_LOG_WARN_STRING +#define ANY_LOG_WARN_STRING "warn" +#endif + +#ifndef ANY_LOG_INFO_STRING +#define ANY_LOG_INFO_STRING "info" +#endif + +#ifndef ANY_LOG_DEBUG_STRING +#define ANY_LOG_DEBUG_STRING "debug" +#endif + +#ifndef ANY_LOG_TRACE_STRING +#define ANY_LOG_TRACE_STRING "trace" +#endif + +static const char *log_level_strings[ANY_LOG_ALL] = { + ANY_LOG_PANIC_STRING, + ANY_LOG_ERROR_STRING, + ANY_LOG_WARN_STRING, + ANY_LOG_INFO_STRING , + ANY_LOG_DEBUG_STRING, + ANY_LOG_TRACE_STRING, +}; + +// Using log_panic results in a call to any_log_exit, which should terminate // the program. The value of ANY_LOG_PANIC is used to specify what action -// to take in log_exit. +// to take in any_log_exit. // By default it is abort // -// NOTE: That log_exit should never return! +// NOTE: That any_log_exit should never return! // #ifndef ANY_LOG_PANIC #define ANY_LOG_PANIC(module, func) abort() #endif // NOTE: This function should be called solely by the macro log_panic -void log_exit(const char *module, const char *func) +void any_log_exit(const char *module, const char *func) { ANY_LOG_PANIC(module, func); } #ifndef ANY_LOG_FORMAT_BEFORE -#define ANY_LOG_FORMAT_BEFORE(level, module, func, levels) \ - "[%s %s] %s: ", module, func, levels[level] +#define ANY_LOG_FORMAT_BEFORE(level, module, func, level_strings) \ + "[%s %s] %s: ", module, func, level_strings[level] #endif #ifndef ANY_LOG_FORMAT_AFTER #define ANY_LOG_FORMAT_AFTER(level, module, func, levels) "\n" #endif -void log_generic(log_level_t level, const char *module, - const char *func, const char *format, ...) +void any_log_format(any_log_level_t level, const char *module, + const char *func, const char *format, ...) { - const char *log_levels[] = { - "panic", "error", "warn", - "info", "debug", "trace", - }; - - fprintf(stdout, ANY_LOG_FORMAT_BEFORE(level, module, func, log_levels)); + fprintf(stdout, + ANY_LOG_FORMAT_BEFORE(level, module, func, log_level_strings)); va_list args; va_start(args, format); vfprintf(stdout, format, args); va_end(args); - fprintf(stdout, ANY_LOG_FORMAT_AFTER(level, module, func, log_levels)); + fprintf(stdout, + ANY_LOG_FORMAT_AFTER(level, module, func, log_level_strings)); } #endif -- cgit v1.2.3