/** * @file log.h * @author Piotr Krygier (everyonencancode@gmail.com) * @brief Logging interfaces * @version 0.1 * @date 2022-02-11 * * @copyright Copyright (c) 2022 * */ #ifndef RSE_LOGGER_H #define RSE_LOGGER_H #ifndef LOG_LEVEL #define LOG_LEVEL LOGLEVEL_DEBUG #endif #include #include #define __FILENAME__ (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__) #define LOGGER(log_level, ...) _log_log(log_level, __FILENAME__, __LINE__, __VA_ARGS__) // #define LOGGER(log_level, ...) printf("[##log_level] %s:%d", __FILE__, __LINE__); printf(__VA_ARGS__) #define LOGT(...) LOGGER(LOGLEVEL_TRACE, __VA_ARGS__) #define LOGD(...) LOGGER(LOGLEVEL_DEBUG, __VA_ARGS__) #define LOGI(...) LOGGER(LOGLEVEL_INFO, __VA_ARGS__) #define LOGW(...) LOGGER(LOGLEVEL_WARNING, __VA_ARGS__) #define LOGE(...) LOGGER(LOGLEVEL_ERROR, __VA_ARGS__) #define LOGF(...) LOGGER(LOGLEVEL_FATAL, __VA_ARGS__) /** * @brief Log level. Is not an enum class, because level is being compared to enable prints * */ typedef enum { LOGLEVEL_TRACE, LOGLEVEL_DEBUG, LOGLEVEL_INFO, LOGLEVEL_WARNING, LOGLEVEL_ERROR, LOGLEVEL_FATAL } LogLevel; void _log_log(unsigned int level, const char* file, int line, const char* fmt, ...); #endif /* RSE_LOGGER_H */