summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorClement Sibille <clements+git@lisible.xyz>2024-05-20 14:33:27 +0900
committerClement Sibille <clements+git@lisible.xyz>2024-05-20 14:33:27 +0900
commit06adbda82803d81f565eb72b42f35339eb5c2720 (patch)
tree4498dc8c264ecfa0c95c312aa397895ff7a31367
parent6f6f70a51538783625c17cdcf21091d53fe45638 (diff)
Allow to choose the log level at runtime
-rw-r--r--CHANGELOG.md3
-rw-r--r--src/lisiblestd/log.c45
-rw-r--r--src/lisiblestd/log.h9
3 files changed, 49 insertions, 8 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index bab9a2f..e592a24 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,8 @@
# Changelog
+## 0.2.0 (Upcoming release)
+- Allow to choose the log level at runtime
+
## 0.1.0 (2024-05-20)
- Add LSTD_ASSERT macros
- Add bitset module
diff --git a/src/lisiblestd/log.c b/src/lisiblestd/log.c
index a28d202..2548fd5 100644
--- a/src/lisiblestd/log.c
+++ b/src/lisiblestd/log.c
@@ -1,18 +1,53 @@
#include "log.h"
+#include <stdlib.h>
+#include <string.h>
+
+LogLevel lstd_log_level = LogLevel_Info;
+
+void lstd_log_init(void) {
+ const char *log_level_str = getenv("LSTD_LOG");
+ if (log_level_str) {
+ lstd_log_level = log_level_from_str(log_level_str);
+ }
+}
+
+const char *LSTD_LOG_LEVEL_STR_TRACE = "TRACE";
+const char *LSTD_LOG_LEVEL_STR_DEBUG = "DEBUG";
+const char *LSTD_LOG_LEVEL_STR_WARN = "WARN";
+const char *LSTD_LOG_LEVEL_STR_ERROR = "ERROR";
+const char *LSTD_LOG_LEVEL_STR_INFO = "INFO";
const char *log_level_to_str(LogLevel log_level) {
switch (log_level) {
case LogLevel_Trace:
- return "TRACE";
+ return LSTD_LOG_LEVEL_STR_TRACE;
case LogLevel_Debug:
- return "DEBUG";
+ return LSTD_LOG_LEVEL_STR_DEBUG;
case LogLevel_Warn:
- return "WARN";
+ return LSTD_LOG_LEVEL_STR_WARN;
case LogLevel_Error:
- return "ERROR";
+ return LSTD_LOG_LEVEL_STR_ERROR;
case LogLevel_Info:
default:
- return "INFO";
+ return LSTD_LOG_LEVEL_STR_INFO;
break;
}
}
+
+LogLevel log_level_from_str(const char *str) {
+ if (strncmp(str, LSTD_LOG_LEVEL_STR_TRACE,
+ strlen(LSTD_LOG_LEVEL_STR_TRACE)) == 0) {
+ return LogLevel_Trace;
+ } else if (strncmp(str, LSTD_LOG_LEVEL_STR_DEBUG,
+ strlen(LSTD_LOG_LEVEL_STR_DEBUG)) == 0) {
+ return LogLevel_Debug;
+ } else if (strncmp(str, LSTD_LOG_LEVEL_STR_WARN,
+ strlen(LSTD_LOG_LEVEL_STR_WARN)) == 0) {
+ return LogLevel_Warn;
+ } else if (strncmp(str, LSTD_LOG_LEVEL_STR_ERROR,
+ strlen(LSTD_LOG_LEVEL_STR_ERROR)) == 0) {
+ return LogLevel_Error;
+ }
+
+ return LogLevel_Info;
+}
diff --git a/src/lisiblestd/log.h b/src/lisiblestd/log.h
index e44dd7e..1fa6ad3 100644
--- a/src/lisiblestd/log.h
+++ b/src/lisiblestd/log.h
@@ -12,11 +12,12 @@ typedef enum {
LogLevel_Error,
LogLevel_Info
} LogLevel;
-#define LSTD_LOG_LEVEL LogLevel_Trace
+
+extern LogLevel lstd_log_level;
#define LOG0(log_level, msg) \
do { \
- if (LSTD_LOG_LEVEL <= log_level) { \
+ if (lstd_log_level <= log_level) { \
fprintf(stderr, LSTD_LOG_PREFIX "%s\n", log_level_to_str(log_level), \
__FILE__, __LINE__, msg); \
} \
@@ -29,7 +30,7 @@ typedef enum {
#define LOG(log_level, fmt, ...) \
do { \
- if (LSTD_LOG_LEVEL <= log_level) { \
+ if (lstd_log_level <= log_level) { \
fprintf(stderr, LSTD_LOG_PREFIX fmt "\n", log_level_to_str(log_level), \
__FILE__, __LINE__, __VA_ARGS__); \
} \
@@ -40,6 +41,8 @@ typedef enum {
#define LOG_ERROR(fmt, ...) LOG(LogLevel_Error, fmt, __VA_ARGS__)
#define LOG_INFO(fmt, ...) LOG(LogLevel_Info, fmt, __VA_ARGS__)
+void lstd_log_init(void);
const char *log_level_to_str(LogLevel log_level);
+LogLevel log_level_from_str(const char *str);
#endif // LSTD_LOG_H
Go back to lisible.xyz