#ifndef __LOGGER_H__ #define __LOGGER_H__ #include "types.h" #define LOG_DEBUG 0 #define LOG_INFO 1 #define LOG_WARN 2 #define LOG_ERROR 3 /* will be fatal */ #define LOG_FATAL 4 /* followed directly by maybe cleanup and exit */ #define __LOGFUNC__ __logger.func = __func__ #define logd( s, ... ) __LOGFUNC__; logger( LOG_DEBUG, s, ##__VA_ARGS__ ); #define logi( s, ... ) __LOGFUNC__; logger( LOG_INFO, s, ##__VA_ARGS__ ); #define logw( s, ... ) __LOGFUNC__; logger( LOG_WARN, s, ##__VA_ARGS__ ); #define loge( s, ... ) __LOGFUNC__; logger( LOG_ERROR, s, ##__VA_ARGS__ ); #define logf( s, ... ) __LOGFUNC__; logger( LOG_FATAL, s, ##__VA_ARGS__ ); typedef struct { Size fd; String func; } Logger; extern Logger __logger; Size logger_init( void ); void logger( Size level, String fmt, ... ); void logger_term( void ); #endif /* __DISPLAY_H__ */