diff options
| author | Clement Sibille <clements+git@lisible.xyz> | 2024-05-20 14:33:27 +0900 | 
|---|---|---|
| committer | Clement Sibille <clements+git@lisible.xyz> | 2024-05-20 14:33:27 +0900 | 
| commit | 06adbda82803d81f565eb72b42f35339eb5c2720 (patch) | |
| tree | 4498dc8c264ecfa0c95c312aa397895ff7a31367 | |
| parent | 6f6f70a51538783625c17cdcf21091d53fe45638 (diff) | |
Allow to choose the log level at runtime
| -rw-r--r-- | CHANGELOG.md | 3 | ||||
| -rw-r--r-- | src/lisiblestd/log.c | 45 | ||||
| -rw-r--r-- | src/lisiblestd/log.h | 9 | 
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  | 
