/* * Created by yuuta on 1/1/22. */ #ifndef _LOG_H #define _LOG_H enum log_level { log_fetal = 1, log_error = 2, log_warn = 3, log_info = 4, log_debug = 5 }; void g_log(enum log_level level, const char *file, int line, const char *format, ...); #define LOGFE(X, code) \ do { g_log(log_fetal, __FUNCTION__, __LINE__, X); \ exit(code); } while (0) #define LOGFEV(X, code, ...) \ do { g_log(log_fetal, __FUNCTION__, __LINE__, X, __VA_ARGS__); \ exit(code); } while (0) #define LOGF(X) g_log(log_fetal, __FUNCTION__, __LINE__, X) #define LOGFV(X, ...) g_log(log_fetal, __FUNCTION__, __LINE__, X, __VA_ARGS__) #define LOGE(X) g_log(log_error, __FUNCTION__, __LINE__, X) #define LOGEV(X, ...) g_log(log_error, __FUNCTION__, __LINE__, X, __VA_ARGS__) #define LOGW(X) g_log(log_warn, __FUNCTION__, __LINE__, X) #define LOGWV(X, ...) g_log(log_warn, __FUNCTION__, __LINE__, X, __VA_ARGS__) #define LOGI(X) g_log(log_info, __FUNCTION__, __LINE__, X) #define LOGIV(X, ...) g_log(log_info, __FUNCTION__, __LINE__, X, __VA_ARGS__) #define LOGD(X) g_log(log_debug, __FUNCTION__, __LINE__, X) #define LOGDV(X, ...) g_log(log_debug, __FUNCTION__, __LINE__, X, __VA_ARGS__) #endif /* _LOG_H */