/** * @file myLog.h * @brief 异步日志系统接口(纯 C) * @details 支持 INFO/ERROR 两级日志,非阻塞写入。 * 首次调用 log_prt 时自动初始化(pthread_once 懒启动),无需手动 init。 * 控制台支持彩色 ANSI 输出,文件支持按大小自动轮转。 */ #ifndef _MY_LOG_H_ #define _MY_LOG_H_ #include #ifdef __cplusplus extern "C" { #endif /** 日志级别:INFO(普通信息,白色输出) */ #define LOG_INFO 0 /** 日志级别:ERROR(错误信息,红色输出) */ #define LOG_ERROR 1 /** * @brief 手动初始化日志系统(可选,首次 log_prt 会自动触发) * @param dir 日志文件目录路径,传 NULL 则使用默认 /tmp/logs * @return 0 成功 */ int log_init(const char *dir); /** * @brief 核心日志打印函数(非阻塞,消息入队列后立即返回) * @param level 日志级别(LOG_INFO 或 LOG_ERROR) * @param file 源文件名(通常传 __FILE__) * @param func 函数名(通常传 __FUNCTION__) * @param line 行号(通常传 __LINE__) * @param fmt printf 格式化字符串 * @param ... 可变参数 */ void log_prt(uint32_t level, const char *file, const char *func, uint32_t line, const char *fmt, ...); /** 开启日志文件写入 */ void log_file_on(void); /** 关闭日志文件写入 */ void log_file_off(void); /** 开启控制台彩色输出 */ void log_console_on(void); /** 关闭控制台输出 */ void log_console_off(void); /** 等待异步队列清空(阻塞直到所有消息写入完成) */ void log_flush(void); /** 停止工作线程、关闭文件、释放消息池 */ void log_cleanup(void); /** INFO 级别便捷日志宏 */ #define LOG_I(fmt, ...) log_prt(LOG_INFO, __FILE__, __FUNCTION__, __LINE__, fmt, ##__VA_ARGS__) /** ERROR 级别便捷日志宏 */ #define LOG_E(fmt, ...) log_prt(LOG_ERROR, __FILE__, __FUNCTION__, __LINE__, fmt, ##__VA_ARGS__) #ifdef __cplusplus } #endif #endif