43 lines
1.4 KiB
C
43 lines
1.4 KiB
C
#ifndef DEBUG_H
|
|
#define DEBUG_H
|
|
|
|
#include <stdio.h>
|
|
#include <time.h>
|
|
|
|
// Debug levels
|
|
typedef enum {
|
|
DEBUG_LEVEL_NONE = 0,
|
|
DEBUG_LEVEL_ERROR = 1,
|
|
DEBUG_LEVEL_WARN = 2,
|
|
DEBUG_LEVEL_INFO = 3,
|
|
DEBUG_LEVEL_DEBUG = 4,
|
|
DEBUG_LEVEL_TRACE = 5
|
|
} debug_level_t;
|
|
|
|
// Global debug level (set at runtime via CLI)
|
|
extern debug_level_t g_debug_level;
|
|
|
|
// Initialize debug system
|
|
void debug_init(int level);
|
|
|
|
// Core logging function
|
|
void debug_log(debug_level_t level, const char* file, int line, const char* format, ...);
|
|
|
|
// Convenience macros that check level before calling
|
|
// Note: TRACE level (5) and above include file:line information for ALL messages
|
|
#define DEBUG_ERROR(...) \
|
|
do { if (g_debug_level >= DEBUG_LEVEL_ERROR) debug_log(DEBUG_LEVEL_ERROR, __FILE__, __LINE__, __VA_ARGS__); } while(0)
|
|
|
|
#define DEBUG_WARN(...) \
|
|
do { if (g_debug_level >= DEBUG_LEVEL_WARN) debug_log(DEBUG_LEVEL_WARN, __FILE__, __LINE__, __VA_ARGS__); } while(0)
|
|
|
|
#define DEBUG_INFO(...) \
|
|
do { if (g_debug_level >= DEBUG_LEVEL_INFO) debug_log(DEBUG_LEVEL_INFO, __FILE__, __LINE__, __VA_ARGS__); } while(0)
|
|
|
|
#define DEBUG_LOG(...) \
|
|
do { if (g_debug_level >= DEBUG_LEVEL_DEBUG) debug_log(DEBUG_LEVEL_DEBUG, __FILE__, __LINE__, __VA_ARGS__); } while(0)
|
|
|
|
#define DEBUG_TRACE(...) \
|
|
do { if (g_debug_level >= DEBUG_LEVEL_TRACE) debug_log(DEBUG_LEVEL_TRACE, __FILE__, __LINE__, __VA_ARGS__); } while(0)
|
|
|
|
#endif /* DEBUG_H */ |