#ifndef _LOGGING_HEADER #define _LOGGING_HEADER 1 #include // log levels: // 0: no logging // 1: errors // 2: warnings // 3: info // 4: trace #define log_error(...) log_message(1, __VA_ARGS__) #define log_warning(...) log_message(2, __VA_ARGS__) #define log_info(...) log_message(3, __VA_ARGS__) #ifdef LOG_ENABLE_TRACE #define log_trace(...) log_message(4, __VA_ARGS__) #endif #ifndef LOG_ENABLE_TRACE #define log_trace(...) do {} while(0) #endif int log_level = 1; void log_message(int level, const char * format, ...) { va_list args; va_start(args, format); if(level <= log_level) { // TODO: format log messages with timestamp, log level and newline at the end vfprintf(stderr, format, args); } va_end(args); } #endif