diff options
Diffstat (limited to 'src/lisiblestd')
| -rw-r--r-- | src/lisiblestd/log.c | 45 | ||||
| -rw-r--r-- | src/lisiblestd/log.h | 9 |
2 files changed, 46 insertions, 8 deletions
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 |
