背景:在考虑代码编写时,考虑到日志是必须的,看看c++有没有合适的日志库。
网络上搜索,好像有不少,还有log4j类似的。
liblogger
一款为C++开发的日志工具,支持输出到文件、网络以及控制台
参考地址:http://sourceforge.net/projects/liblogger/
Log4cpp
下载地址: http://sourceforge.net/projects/log4cpp/files
log4cplus
下载地址:http://sourceforge.net/projects/log4cplus/
因为用的是VC,windows平台,发现好多都是使用pthread, 排除掉。
又有好多是新支持C11的,我的版本太老,不行。
最后找到了这个:
http://my.oschina.net/u/988092/blog/198377
只要是支持vc6之后的版本,而且多线程。
而且对一些数据16进制输出(类似以前汇编的d命令)。
2016-08-18 13:18:59.131000 | DEBUG | 3112:6908:trade.cpp:345 | Order:[656]
0 1 2 3 4 5 6 7 8 9 A B C D E F 0123456789ABCDEF
0x00000000 39 39 39 39 00 00 00 00 00 00 00 30 36 37 31 38 9999.......06718
0x00000010 35 00 00 00 00 00 00 00 61 75 31 37 30 38 00 00 5.......au1708..
0x00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0x00000030 00 00 00 00 00 00 00 32 00 00 00 00 00 00 00 00 .......2........
0x00000040 00 00 00 00 30 36 37 31 38 35 00 00 00 00 00 00 ....067185......
0x00000050 00 00 00 00 32 31 30 00 00 00 00 31 00 00 00 00 ....210....1....
0x00000060 00 00 00 00 00 38 72 40 01 00 00 00 33 00 00 00 .....8r@....3...
0x00000070 00 00 00 00 00 00 31 00 01 00 00 00 31 00 00 00 ......1.....1...
0x00000080 00 00 00 00 00 00 00 00 30 CA 11 41 00 00 00 00 ........0..A....
0x00000090 39 39 39 39 63 61 63 00 00 00 00 00 00 00 00 00 9999cac.........
0x000000A0 00 00 00 00 00 00 00 00 00 00 00 00 20 20 20 20 ............
只需要把log.c 和log.h加入项目中即可使用,也支持编译成dll供加载调用。
主程序中加载 (后面再考虑通过配置文件加载日志级别)
CreateLogHandleG();
SetLogOutputG( LOG_OUTPUT_FILE , "xyzproxy.log" , LOG_NO_OUTPUTFUNC ); //文件名
SetLogLevelG( LOG_LEVEL_DEBUG );
SetLogStylesG( LOG_STYLES_HELLO , LOG_NO_STYLEFUNC );
退出时
DestroyLogHandleG();
InfoLogG( __FILE__ , __LINE__ , "ReqConnect(%s)",pFront );
DebugLogG( __FILE__ , __LINE__ ,"Cxyztrade::OnRspUserLogin(LoginField, err(%d),bIsLast(%d) )",pRspInfo->ErrorID,bIsLast);
DebugHexLogG(__FILE__,__LINE__,(char*)pRspUserLogin,sizeof(*pRspUserLogin),"FtdcRspUserLogin:[%ld]",sizeof(*pRspUserLogin));
其他的日志文件大小配置,级别配置等,待后面继续尝试:-)
LOGS 包含LOG数组
LOGS ----------- LOG
LOGSCONF ------------- LOGCONF
LOGC (精简版本,可以直接调函数写日期)
g = CreateLogHandleFromConfig( "ctest.log.conf" , NULL ) ;
if( g == NULL )
{
printf( "从配置文件构建日志句柄失败\n" );
return -1;
}else{
SetGlobalLOG(g);
}
配置文件:ctest.log.conf
output FILE ctestlog.log
level DEBUG
styles DATETIME|LOGLEVEL|PID|TID|SOURCE|FORMAT|NEWLINE
options CHANGE_TEST
rotate_mode SIZE
rotate_size 10MB
log_bufsize 1MB 5MB