summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorClement Sibille <clements+git@lisible.xyz>2024-05-20 00:44:59 +0900
committerClement Sibille <clements+git@lisible.xyz>2024-05-20 01:28:21 +0900
commit817c1fd14c9b9b3fc93922f7ea06d9edfd53c63b (patch)
tree047b07b108a08c7dd0bd2f40bafa79bfb49dd9c4 /src
parent399be44fbc3767e7c1ff505119f9e07ee25b1078 (diff)
Add log levels to log macros
Diffstat (limited to 'src')
-rw-r--r--src/lisiblestd/assert.h4
-rw-r--r--src/lisiblestd/log.c18
-rw-r--r--src/lisiblestd/log.h37
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
Go back to lisible.xyz