Log4j的C++版本Log4cplus

说起日志系统,不得不提大名鼎鼎的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   
02 #include   
03 #include   
04     
05 using namespace log4cplus;  
06     
07 int  
08 main()  
09 {  
10     BasicConfigurator config;  
11     config.configure();  
12     
13     Logger logger = Logger::getInstance("main");  
14     LOG4CPLUS_WARN(logger, "Hello, World!");  
15     return ;  
16 }
b)可订制的方式
查看源码
打印 ?
01 /*    严格实现步骤1-6,appender输出到屏幕, 其中的布局格式和LogLevel后面会详细解释。*/  
02 #include   
03 #include   
04 #include      
05 using namespace log4cplus;  
06 using namespace log4cplus::helpers;     
07 int main(){  
08     /* step 1: Instantiate an appender object */      
09     SharedObjectPtr _append (new ConsoleAppender());      
10     _append->setName("append for test");     
11     /* step 2: Instantiate a layout object */      
12     std::string pattern = "%d{%m/%d/%y %H:%M:%S}  - %m [%l]%n";      
13     std::auto_ptr _layout(new PatternLayout(pattern));     
14     /* step 3: Attach the layout object to the appender */      
15     _append->setLayout( _layout );     
16     /* step 4: Instantiate a logger object */      
17     Logger _logger = Logger::getInstance("test");     
18     /* step 5: Attach the appender object to the logger  */     
19     _logger.addAppender(_append);     
20     /* step 6: Set a priority for the logger  */      
21     _logger.setLogLevel(ALL_LOG_LEVEL);     
22      /* log activity */      
23     LOG4CPLUS_DEBUG(_logger, "This is the FIRST log message...")      
24    sleep(1);      
25    LOG4CPLUS_WARN(_logger, "This is the SECOND log message...")     
26    return 0;  
27 }

4)配置

Log4cplus配置基本与log4J相同。下面是一个例子

查看源码
打印 ?
01 log4cplus.rootLogger=DEBUG, STDOUT, ALL_MSGS  
02     
03     
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  
08     
09     
10 #设置日志追加到文件尾  
11 log4cplus.appender.ALL_MSGS=log4cplus::RollingFileAppender    
12     
13 #设置日志文件大小  
14 log4cplus.appender.ALL_MSGS.MaxFileSize=100MB  
15     
16 #设置生成日志最大个数  
17 log4cplus.appender.ALL_MSGS.MaxBackupIndex=10  
18     
19 #设置输出日志路径  
20 log4cplus.appender.ALL_MSGS.File=log/test.log  
21 log4cplus.appender.ALL_MSGS.layout=log4cplus::PatternLayout  
22 #设置日志打印格式  
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

你可能感兴趣的:(C++,功能模块)