From 817c1fd14c9b9b3fc93922f7ea06d9edfd53c63b Mon Sep 17 00:00:00 2001 From: Clement Sibille Date: Mon, 20 May 2024 00:44:59 +0900 Subject: Add log levels to log macros --- meson.build | 6 +++++- src/lisiblestd/assert.h | 4 ++-- src/lisiblestd/log.c | 18 ++++++++++++++++++ src/lisiblestd/log.h | 37 ++++++++++++++++++++++++++++++++----- 4 files changed, 57 insertions(+), 8 deletions(-) create mode 100644 src/lisiblestd/log.c diff --git a/meson.build b/meson.build index da667ce..f5e724d 100644 --- a/meson.build +++ b/meson.build @@ -1,7 +1,11 @@ project('lisiblestd', 'c', default_options: ['c_std=c18', 'warning_level=3']) lisiblestd_incdir = include_directories('src/') -lisiblestd_lib = library('lisiblestd', 'src/lisiblestd/memory.c', 'src/lisiblestd/string.c') +lisiblestd_lib = library('lisiblestd', + 'src/lisiblestd/log.c', + 'src/lisiblestd/memory.c', + 'src/lisiblestd/string.c' +) lisiblestd_dep = declare_dependency(include_directories: lisiblestd_incdir, link_with: [lisiblestd_lib]) test_string = executable('test_string', 'tests/test_runner.c', 'tests/string.c', dependencies: [lisiblestd_dep]) diff --git a/src/lisiblestd/assert.h b/src/lisiblestd/assert.h index 9bd7514..7a9ce46 100644 --- a/src/lisiblestd/assert.h +++ b/src/lisiblestd/assert.h @@ -8,14 +8,14 @@ extern void exit(int); #define LSTD_ASSERT(expr) \ do { \ if (!(expr)) { \ - LOG("Assertion failed:\n\t%s", #expr); \ + LOG(LogLevel_Error, "Assertion failed:\n\t%s", #expr); \ exit(1); \ } \ } while (0) #define LSTD_UNIMPLEMENTED() \ do { \ - LOG0("Unimplemented code reached"); \ + LOG0(LogLevel_Error, "Unimplemented code reached"); \ exit(1); \ } while (0) diff --git a/src/lisiblestd/log.c b/src/lisiblestd/log.c new file mode 100644 index 0000000..a28d202 --- /dev/null +++ b/src/lisiblestd/log.c @@ -0,0 +1,18 @@ +#include "log.h" + +const char *log_level_to_str(LogLevel log_level) { + switch (log_level) { + case LogLevel_Trace: + return "TRACE"; + case LogLevel_Debug: + return "DEBUG"; + case LogLevel_Warn: + return "WARN"; + case LogLevel_Error: + return "ERROR"; + case LogLevel_Info: + default: + return "INFO"; + break; + } +} diff --git a/src/lisiblestd/log.h b/src/lisiblestd/log.h index c280034..e44dd7e 100644 --- a/src/lisiblestd/log.h +++ b/src/lisiblestd/log.h @@ -3,16 +3,43 @@ #include -#define LOG_PREFIX "[%s:%d] " +#define LSTD_LOG_PREFIX "[%s %s:%d] " -#define LOG0(msg) \ +typedef enum { + LogLevel_Trace = 0, + LogLevel_Debug, + LogLevel_Warn, + LogLevel_Error, + LogLevel_Info +} LogLevel; +#define LSTD_LOG_LEVEL LogLevel_Trace + +#define LOG0(log_level, msg) \ do { \ - fprintf(stderr, LOG_PREFIX "%s\n", __FILE__, __LINE__, msg); \ + if (LSTD_LOG_LEVEL <= log_level) { \ + fprintf(stderr, LSTD_LOG_PREFIX "%s\n", log_level_to_str(log_level), \ + __FILE__, __LINE__, msg); \ + } \ } while (0) +#define LOG0_TRACE(msg) LOG0(LogLevel_Trace, msg) +#define LOG0_DEBUG(msg) LOG0(LogLevel_Debug, msg) +#define LOG0_WARN(msg) LOG0(LogLevel_Warn, msg) +#define LOG0_ERROR(msg) LOG0(LogLevel_Error, msg) +#define LOG0_INFO(msg) LOG0(LogLevel_Info, msg) -#define LOG(fmt, ...) \ +#define LOG(log_level, fmt, ...) \ do { \ - fprintf(stderr, LOG_PREFIX fmt "\n", __FILE__, __LINE__, __VA_ARGS__); \ + if (LSTD_LOG_LEVEL <= log_level) { \ + fprintf(stderr, LSTD_LOG_PREFIX fmt "\n", log_level_to_str(log_level), \ + __FILE__, __LINE__, __VA_ARGS__); \ + } \ } while (0) +#define LOG_TRACE(fmt, ...) LOG(LogLevel_Trace, fmt, __VA_ARGS__) +#define LOG_DEBUG(fmt, ...) LOG(LogLevel_Debug, fmt, __VA_ARGS__) +#define LOG_WARN(fmt, ...) LOG(LogLevel_Warn, fmt, __VA_ARGS__) +#define LOG_ERROR(fmt, ...) LOG(LogLevel_Error, fmt, __VA_ARGS__) +#define LOG_INFO(fmt, ...) LOG(LogLevel_Info, fmt, __VA_ARGS__) + +const char *log_level_to_str(LogLevel log_level); #endif // LSTD_LOG_H -- cgit v1.2.3