diff options
| author | Clement Sibille <clements+git@lisible.xyz> | 2024-05-20 00:44:59 +0900 |
|---|---|---|
| committer | Clement Sibille <clements+git@lisible.xyz> | 2024-05-20 01:28:21 +0900 |
| commit | 817c1fd14c9b9b3fc93922f7ea06d9edfd53c63b (patch) | |
| tree | 047b07b108a08c7dd0bd2f40bafa79bfb49dd9c4 /src | |
| parent | 399be44fbc3767e7c1ff505119f9e07ee25b1078 (diff) | |
Add log levels to log macros
Diffstat (limited to 'src')
| -rw-r--r-- | src/lisiblestd/assert.h | 4 | ||||
| -rw-r--r-- | src/lisiblestd/log.c | 18 | ||||
| -rw-r--r-- | src/lisiblestd/log.h | 37 |
3 files changed, 52 insertions, 7 deletions
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 <stdio.h> -#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 |
