/********************************************************************* *文件说明: 日志打印库 *作者: logos *日期: 2018/09/01 *修改日志: 2018/09/01 logos 从comm剥离 ***********************************************************************/ #pragma once #ifndef DLL_INCLUDE_LOG_H #define DLL_INCLUDE_LOG_H #ifndef EXPORT_C #define EXPORT_C extern "C" #endif #ifndef WINAPI #define WINAPI __stdcall #endif //此宏判断条件不成立,则返回指定值(int),代码中可考虑使用,简化代码 #define RETURN_CHK(p, v) if (!(p)) \ {\ trace(LEVEL_WARN, __FILE__, __LINE__, __FUNCTION__, "return:%d", v); \ return (v); \ } //日志打印回调函数接口类型 //level 打印等级 //pszlog 日志内容 //param 注册时附加参数 typedef void (WINAPI *RECALL_LOG)(int level, const char* pszlog, void* param); enum EM_LOG_LEVEL {//打印类型-等级 LEVEL_CRIT = 0, LEVEL_ERR, LEVEL_WARN, LEVEL_INFO1, LEVEL_INFO2, LEVEL_INFO3, LEVEL_INFO4, }; //此处定义打印log接口 #define LOG_INFO(msg, ...) trace(LEVEL_INFO1, 0, 0, 0, msg, __VA_ARGS__) #define LOG_INF1(msg, ...) trace(LEVEL_INFO2, 0, 0, 0, msg, __VA_ARGS__) #define LOG_INF2(msg, ...) trace(LEVEL_INFO3, 0, 0, 0, msg, __VA_ARGS__) #define LOG_INF3(msg, ...) trace(LEVEL_INFO4, 0, 0, 0, msg, __VA_ARGS__) #define LOG_WARN(msg, ...) trace(LEVEL_WARN, __FILE__, __LINE__, __FUNCTION__, msg, __VA_ARGS__) #define LOG_ERR(msg, ...) trace(LEVEL_ERR, __FILE__, __LINE__, __FUNCTION__, msg, __VA_ARGS__) #define LOG_CRIT(msg, ...) trace(LEVEL_CRIT, __FILE__, __LINE__, __FUNCTION__, msg, __VA_ARGS__) struct TLogConfig {//日志配置项目 int logLevel; //打印等级 最低 LEVEL_WARN 最高 LEVEL_INFO3 int bJustSave; //日志即时保存 1立即保存 0不立即保存 立即保存到文件,对硬盘损耗较大 int buffsize; //日志缓冲区大小 单位:Byte 保存在内存中,为0则不设置缓冲区,只能从文件中看 int filesize; //日志单个文件大小 单位:MByte int autoClear; //日志自动清理总开关 1清理 0不清理 int clearDay; //单个日志保留多少天 -- 0 无效 int clearCount; //总共保存多少个文件 -- 0 无效 int clearSize; //总共保存多少M日志文件 -- 0 无效 单位:MByte }; #define LOG_MAX_BUFF 10240 //单条日志最大字节 #define LOG_NAME "sys.log" #define LOG_CFG_KEY "log" //在配置文件中(data\\sys.cfg)的设置key [log] #define LOG_SAVE_FLAG "justSave" //日志即时保存 默认 justSave=0 #define LOG_LEVEL "level" //日志打印等级 默认 level=4 #define LOG_BUFF_SIZE "buff_size" //日志缓冲区大小 默认 buff_size=4096 #define LOG_FILE_SIZE "file_size" //日志单个文件大小 默认 file_size=20 #define LOG_CLEAR_FLAG "clear" //日志自动清理开关 默认 clear=1 #define LOG_CLEAR_DAY "clear_day" //单个日志保留多少天 默认 clear_day=15 #define LOG_CLEAR_CNT "clear_count" //日志保存多少个文件 默认 clear_count=0 #define LOG_CLEAR_SIZE "clear_size" //日志保存多大日志文件 默认 clear_size=0 /**************************************************** *Function: 初始化日志模块 *Intput: NULL *Output: NULL *Return: 成功返回0 ,失败返回错误码 ******************************************************/ EXPORT_C int WINAPI log_init(); /**************************************************** *Function: 释放日志模块 -- 初始化N次就要释放N次 *Intput: NULL *Output: NULL *Return: 成功返回0 ,失败返回错误码 ******************************************************/ EXPORT_C int WINAPI log_deinit(); /**************************************************** *Function: 获取日志打印参数 *Intput: pcfg 日志打印参数 *Output: pcfg 日志打印参数 *Return: 成功返回0,失败返回错误码 ******************************************************/ EXPORT_C int WINAPI get_log_config(TLogConfig* pcfg); /**************************************************** *Function: 设置日志打印参数 *Intput: pcfg 日志打印参数 *Output: NULL *Return: 成功返回0,失败返回错误码 ******************************************************/ EXPORT_C int WINAPI set_log_config(const TLogConfig* pcfg); /**************************************************** *Function: 按当前时间(精确到秒),保存当前日志文件 *Intput: NULL *Output: NULL *Return: 成功返回0,失败返回错误码 *PS: 调用此接口,可以不关闭程序查看日志文件 ******************************************************/ EXPORT_C int WINAPI save_now_log(); /**************************************************** *Function: 打印log函数,静态调用时,可直接用宏调用 *Intput: LogLevel打印级别,分为info1, info2, info3, warn error crit file 文件名, warn级别以必须加入 line 文件行, warn级别以必须加入 fun 函数名, warn级别以必须加入 msgFormat 字符串格式,与printf用法相同 后面可加N个参数,最大支持1024个字节 *Output: NULL *Return: 成功返回0,失败返回错误码 ******************************************************/ EXPORT_C int WINAPI trace(int LogLevel, const char* file, int line, const char* fun, const char *pszFormat, ...); /**************************************************** *Function: 打印log函数,主要用于vb/c#调用 *Intput: LogLevel打印级别,分为info1, info2, info3, warn error crit pszLog 要打印内容 *Output: NULL *Return: 成功返回0,失败返回错误码 ******************************************************/ EXPORT_C int WINAPI traces(int LogLevel, const char *pszLog); /**************************************************** *Function: 注册日志打印接口,注册后所有日志都会回调到此函数地址 *Intput: rcLog 回调函数地址 lparam 附加参数,可以NULL *Output: NULL *Return: 成功返回0,失败返回错误码 ******************************************************/ EXPORT_C int WINAPI regist_log_recv(RECALL_LOG rcLog, void* lparam); /**************************************************** *Function: 释放日志打印注册接口 *Intput: NULL *Output: NULL *Return: 成功返回0,失败返回错误码 ******************************************************/ EXPORT_C int WINAPI unregist_log_recv(); /**************************************************** *Function: 获取日志缓冲区中的日志内容, 仅当日志缓冲区大小设置大于0时才能获取 *Intput: pszLog 日志缓存区 nSize 缓冲区大小 start 从哪开始获取? *Output: NULL *Return: 返回获取到的字节大小,失败返回错误码<0 ******************************************************/ EXPORT_C int WINAPI get_log_buff(char* pszLog, int nSize, int start = 0); #endif //防止重复包含头文件