说起日志系统,不得不提大名鼎鼎的Log4j。特别是使用Java的人们,能够说是无人不知无人不晓无人不用。
Log4j以其简单的使用方式(引入一个jar包。一行代码就可以调用)。灵活(可通过配置文件任意配置),功能强大(多个级别。可配置多个输出目的地,Console,File。系统日志。远端的LogServer等等,可订制日志格式,自己主动产生,删除日志文件)等等等等特性,一直是Java日志系统的首选。
1.Log4j的C++版本号Log4cplus
上面说到,日志在如今的系统里不可缺少。Java有功能强大的Log4j能够使用,作为最重要变成语言之中的一个的C++有什么选择呢?
幸运的是。有一些大牛非常早之前就发现了这个问题,他们仿照Log4J。使用C++语言开发了一套日志系统Log4cplus,Log4cplus的目的非常明白。打造C++版的Log4j。并且最重要的是Log4cplus是开源的。
2.使用简单介绍
1)下载http://sourceforge.net/projects/log4cplus/
2)Log4j是一个C++库,编译以后就可以使用。同一时候log4cplus支持windows和linux:
windows下:打开根文件夹下的msvc10以下的vsproject。编译就可以。
Linux下:configure, make
3)使用
a)最简单的使用方式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#include <log4cplus/logger.h>
#include <log4cplus/configurator.h>
#include <iomanip>
using
namespace
log4cplus;
int
main()
{
BasicConfigurator config;
config.configure();
Logger logger = Logger::getInstance(
"main"
);
LOG4CPLUS_WARN(logger,
"Hello, World!"
);
return
;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
/* 严格实现步骤1-6,appender输出到屏幕, 当中的布局格式和LogLevel后面会详解。*/
#include <log4cplus logger.h=""></log4cplus>
#include <log4cplus consoleappender.h=""></log4cplus>
#include <log4cplus layout.h=""></log4cplus>
using
namespace
log4cplus;
using
namespace
log4cplus::helpers;
int
main(){
/* step 1: Instantiate an appender object */
SharedObjectPtr _append (
new
ConsoleAppender());
_append->setName(
"append for test"
);
/* step 2: Instantiate a layout object */
std::string pattern =
"%d{%m/%d/%y %H:%M:%S} - %m [%l]%n"
;
std::auto_ptr _layout(
new
PatternLayout(pattern));
/* step 3: Attach the layout object to the appender */
_append->setLayout( _layout );
/* step 4: Instantiate a logger object */
Logger _logger = Logger::getInstance(
"test"
);
/* step 5: Attach the appender object to the logger */
_logger.addAppender(_append);
/* step 6: Set a priority for the logger */
_logger.setLogLevel(ALL_LOG_LEVEL);
/* log activity */
LOG4CPLUS_DEBUG(_logger,
"This is the FIRST log message..."
)
sleep(1);
LOG4CPLUS_WARN(_logger,
"This is the SECOND log message..."
)
return
0;
}
|
4)配置
Log4cplus配置基本与log4J同样。
以下是一个样例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
log4cplus.rootLogger=DEBUG, STDOUT, ALL_MSGS
log4cplus.appender.STDOUT=log4cplus::ConsoleAppender
log4cplus.appender.STDOUT.layout=log4cplus::PatternLayout
#log4cplus.appender.STDOUT.layout.ConversionPattern=%d{%m/%d/%y %H:%M:%S} [%t] %-5p %c{2} %%%x%% - %m [%l]%n
log4cplus.appender.STDOUT.layout.ConversionPattern=[%-5p %d{%y-%m-%d %H:%M:%S}] [%l]%n%m%n%n
#设置日志追加到文件尾
log4cplus.appender.ALL_MSGS=log4cplus::RollingFileAppender
#设置日志文件大小
log4cplus.appender.ALL_MSGS.MaxFileSize=100MB
#设置生成日志最大个数
log4cplus.appender.ALL_MSGS.MaxBackupIndex=10
#设置输出日志路径
log4cplus.appender.ALL_MSGS.File=
log
/test.
log
log4cplus.appender.ALL_MSGS.layout=log4cplus::PatternLayout
#设置日志打印格式
#log4cplus.appender.ALL_MSGS.layout.ConversionPattern=|%D:%d{%Q}|%p|%t|%l|%m|%n
log4cplus.appender.ALL_MSGS.layout.ConversionPattern=[%-5p %d{%y-%m-%d %H:%M:%S}] [%l]%n%m%n%n
#匹配同样日志级别,仅仅有debug日志才输入到该文件里
#log4cplus.appender.ALL_MSGS.filters.1=log4cplus::spi::LogLevelMatchFilter
#log4cplus.appender.DEBUG_MSGS.filters.1.LogLevelToMatch=DEBUG
#log4cplus.appender.DEBUG_MSGS.filters.1.AcceptOnMatch=true
#log4cplus.appender.DEBUG_MSGS.filters.2=log4cplus::spi::DenyAllFilter
|