#ifndef LOG_H
#define LOG_H
#ifdef __cplusplus
#include <cstddef>
extern "C" {
#else
#include <stddef.h>
#endif
typedef enum {
LOG_LEVEL_TRACE = 0,
LOG_LEVEL_DEBUG,
LOG_LEVEL_INFO,
LOG_LEVEL_WARN,
LOG_LEVEL_ERROR,
LOG_LEVEL_FATAL
} log_level_e;
#define TRACE(...) log_entry(LOG_LEVEL_TRACE, __FILE__, __LINE__, __func__, __VA_ARGS__)
#define DEBUG(...) log_entry(LOG_LEVEL_DEBUG, __FILE__, __LINE__, __func__, __VA_ARGS__)
#define INFO(...) log_entry(LOG_LEVEL_INFO, __FILE__, __LINE__, __func__, __VA_ARGS__)
#define WARN(...) log_entry(LOG_LEVEL_WARN, __FILE__, __LINE__, __func__, __VA_ARGS__)
#define ERROR(...) log_entry(LOG_LEVEL_ERROR, __FILE__, __LINE__, __func__, __VA_ARGS__)
#define FATAL(...) log_entry(LOG_LEVEL_FATAL, __FILE__, __LINE__, __func__, __VA_ARGS__)
void log_set_level(size_t level);
void log_entry(
log_level_e level,
const char* file,
int line,
const char* function,
const char* format,
...);
#ifdef __cplusplus
}
#endif
#endif