说起日志系统,不得不提大名鼎鼎的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下面的vs工程,编译即可。
Linux下:configure, make
3)使用
a)最简单的使用方式
01 | #include <log4cplus/logger.h> |
02 | #include <log4cplus/configurator.h> |
05 | using namespace log4cplus; |
10 | BasicConfigurator config; |
13 | Logger logger = Logger::getInstance( "main" ); |
14 | LOG4CPLUS_WARN(logger, "Hello, World!" ); |
b)可订制的方式
02 | #include <log4cplus logger.h=""></log4cplus> |
03 | #include <log4cplus consoleappender.h=""></log4cplus> |
04 | #include <log4cplus layout.h=""></log4cplus> |
05 | using namespace log4cplus; |
06 | using namespace log4cplus::helpers; |
09 | SharedObjectPtr _append ( new ConsoleAppender()); |
10 | _append->setName( "append for test" ); |
12 | std::string pattern = "%d{%m/%d/%y %H:%M:%S} - %m [%l]%n" ; |
13 | std::auto_ptr _layout( new PatternLayout(pattern)); |
15 | _append->setLayout( _layout ); |
17 | Logger _logger = Logger::getInstance( "test" ); |
19 | _logger.addAppender(_append); |
21 | _logger.setLogLevel(ALL_LOG_LEVEL); |
23 | LOG4CPLUS_DEBUG(_logger, "This is the FIRST log message..." ) |
25 | LOG4CPLUS_WARN(_logger, "This is the SECOND log message..." ) |
4)配置
Log4cplus配置基本与log4J相同。下面是一个例子
01 | log4cplus.rootLogger=DEBUG, STDOUT, ALL_MSGS |
04 | log4cplus.appender.STDOUT=log4cplus::ConsoleAppender |
05 | log4cplus.appender.STDOUT.layout=log4cplus::PatternLayout |
06 | #log4cplus.appender.STDOUT.layout.ConversionPattern=%d{%m/%d/%y %H:%M:%S} [%t] %-5p %c{2} %%%x%% - %m [%l]%n |
07 | log4cplus.appender.STDOUT.layout.ConversionPattern=[%-5p %d{%y-%m-%d %H:%M:%S}] [%l]%n%m%n%n |
11 | log4cplus.appender.ALL_MSGS=log4cplus::RollingFileAppender |
14 | log4cplus.appender.ALL_MSGS.MaxFileSize=100MB |
17 | log4cplus.appender.ALL_MSGS.MaxBackupIndex=10 |
20 | log4cplus.appender.ALL_MSGS.File= log /test. log |
21 | log4cplus.appender.ALL_MSGS.layout=log4cplus::PatternLayout |
23 | #log4cplus.appender.ALL_MSGS.layout.ConversionPattern=|%D:%d{%Q}|%p|%t|%l|%m|%n |
24 | log4cplus.appender.ALL_MSGS.layout.ConversionPattern=[%-5p %d{%y-%m-%d %H:%M:%S}] [%l]%n%m%n%n |
25 | #匹配相同日志级别,只有debug日志才输入到该文件中 |
26 | #log4cplus.appender.ALL_MSGS.filters.1=log4cplus::spi::LogLevelMatchFilter |
27 | #log4cplus.appender.DEBUG_MSGS.filters.1.LogLevelToMatch=DEBUG |
28 | #log4cplus.appender.DEBUG_MSGS.filters.1.AcceptOnMatch=true |
29 | #log4cplus.appender.DEBUG_MSGS.filters.2=log4cplus::spi::DenyAllFilter |