|
|
/*********************************************************************
|
|
|
*文件说明: 日志打印库
|
|
|
*作者: 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 //防止重复包含头文件
|