vs2010配置安装使用log4cplus日志系统

来源:互联网 发布:5s是否支持4g网络 编辑:程序博客网 时间:2024/05/01 15:54

log4cplus是C++编写的开源的日志系统,功能非常全面,用到自己开发的工程中会比较专业的,:),本文介绍了log4cplus基本概念,以及如何安装,配置。


 ### 简介 ###
log4cplus是C++编写的开源的日志系统,前身是Java编写的log4j系统.受Apache Software License保护。作者是Tad E. Smith。log4cplus具有线程安全、灵活、以及多粒度控制的特点,通过将信息划分优先级使其可以面向程序调试、运行、测试、和维护等全生命周期; 你可以选择将信息输出到屏幕、文件、NT event log、甚至是远程服务器;通过指定策略对日志进行定期备份等等。
  
### 下载 ###
最新的log4cplus可以从以下网址下载  http://sourceforge.NET/projects/log4cplus/

 

选择生成  生成解决方案



2. windows下的配置

打开MSVC10文件夹

vs2010打开 log4cplus.sln

编译选项 选择 Debug      win32_unicode 

文件夹log4cplus-1.2.0-rc3\msvc10\Win32下


就会多出bin.Debug_Unicode

将编译选项Debug 改成Release就生成release版本


在这个文件夹下

有log4cplusSUD.lib

log4cplusUD.dll

log4cplusUD.lib

将其复制到log4文件夹根目录下新建文件夹lib




4。在环境配置完成后,我们可以对具体的项目环境进行配置。


log4cplus

包含目录 D:\CPP\log4cplus-1.2.0-rc3\include
库目录D:\CPP\log4cplus-1.2.0-rc3\lib

连接器 
log4cplusSUD.lib
log4cplusUD.lib

我们创建一个控制台项目,并进行如下配置:

1。采用静态链接库:

右键项目->属性->

加入log4cplusSD.lib

注意:才用静态链接库,可以删除bin目录下的log4cplusD.dll 以及lib目录下的log4cplusD.lib 2个文件。

 

2。采用动态链接库:

右键项目->属性->

注意:才用动态链接库,需要bin目录下的log4cplusD.dll 以及lib目录下的log4cplusD.lib 2个文件。可以删除lib目录下的log4cplusSD.lib 文件

 

5.编写简单程序并测试

[cpp] view plaincopy
  1. #include "stdafx.h"  
  2.   
  3. #include <log4cplus/loggingmacros.h>  
  4. #include <log4cplus/configurator.h>  
  5. #include <iomanip>  
  6.   
  7. using namespace log4cplus;  
  8.   
  9. int _tmain(int argc, _TCHAR* argv[])  
  10. {  
  11.     BasicConfigurator config;  
  12.     config.configure();  
  13.   
  14.     Logger logger = Logger::getInstance("main");  
  15.     LOG4CPLUS_WARN(logger, "Hello, World!");  
  16.     getchar();  
  17.     return 0;  
  18. }  

此处

  1. #include <log4cplus/log.h>头文件有误 
 

 

 

 

注意:

log4cplus官方源码采用的“多字节字符集”,如果你项目采用“使用 Unicode 字符集”则可以将log4cplus字符集修改后重新生成对应的库文件!

以下为常用的封装好的测试实例:

VLog.h

[cpp] view plaincopy
  1. #pragma once  
  2. #ifndef VLOG_H  
  3. #define VLOG_H  
  4.   
  5. #include <log4cplus/logger.h>  
  6. #include <log4cplus/layout.h>  
  7. #include <log4cplus/loglevel.h>  
  8. #include <log4cplus/fileappender.h>  
  9. #include <log4cplus/consoleappender.h>  
  10.   
  11. #include <log4cplus/helpers/loglog.h>  
  12.   
  13. using namespace log4cplus;  
  14. using namespace helpers;  
  15.   
  16. /** 
  17.  * 使用log4cplus 
  18.  * @param logfile 记录的文件路径,如“main.log” 
  19.  * @param format 格式化前缀,默认%d [%l] %-5p : %m %n 
  20.  * @param bebug 是否打印bebug信息,默认true 
  21.  * @param lv 设置日记级别 
  22.  * @return  
  23.  */  
  24. void InitLog4cplus(  
  25.         const wchar_t* logfile,  
  26.         const bool console = true,  
  27.         const bool bebug = true,  
  28.         LogLevel lv = DEBUG_LOG_LEVEL,  
  29.         const wchar_t* format = L"%d : %m%n" /*%d %-5p [%c < %l] : %m %n*/  
  30.         );  
  31.   
  32. /** 
  33.  * 获得根日志 
  34.  * @return  
  35.  */  
  36. Logger GetRootLogger(void);  
  37.   
  38. /** 
  39.  * 获得子日志 
  40.  * @param child 子日志名,如,sub;sub.sub1 
  41.  * @return  
  42.  */  
  43. Logger GetSubLogger(const wchar_t* sub);  
  44.   
  45. /** 
  46.  * 关闭日志系统 
  47.  */  
  48. void ShutdownLogger(void);  
  49.   
  50. #endif  /* VLOG_H */  


VLog.cpp

[cpp] view plaincopy
  1. /************************************************************************/  
  2. /* 使用规则:                                                             */  
  3. /* 需要log4cplus动态/静态链接库及头文件                                      */  
  4. /* log4cplus.lib + log4cplus.dll 为动态链接库。log4cplusS.lib为静态链接库    */  
  5. /************************************************************************/  
  6. #include "VLog.h"  
  7.   
  8. void InitLog4cplus(const wchar_t* logfile, const bool console, const bool bebug,  
  9.         LogLevel lv, const wchar_t* format)  
  10. /* 
  11. NOT_SET_LOG_LEVEL               (   -1) :接受缺省的LogLevel,如果有父logger则继承它的 
  12. LogLevelALL_LOG_LEVEL           (    0) :开放所有log信息输出 
  13. TRACE_LOG_LEVEL                 (    0) :开放trace信息输出(即ALL_LOG_LEVEL) 
  14. DEBUG_LOG_LEVEL                 (10000) :开放debug信息输出 
  15. INFO_LOG_LEVEL                  (20000) :开放info信息输出 
  16. WARN_LOG_LEVEL                  (30000) :开放warning信息输出 
  17. ERROR_LOG_LEVEL                 (40000) :开放error信息输出 
  18. FATAL_LOG_LEVEL                 (50000) :开放fatal信息输出 
  19. OFF_LOG_LEVEL                   (60000) :关闭所有log信息输出 
  20.  */ {  
  21.     // 0.日志系统配置:设置显示debug信息  
  22.     LogLog::getLogLog()->setInternalDebugging(bebug);  
  23.   
  24.   
  25.     // 创建屏幕输出Appender,不采用stderror流,不采用立刻写入模式  
  26.     SharedAppenderPtr pappender1(new RollingFileAppender(logfile, 1024 * 1024 * 200, 50, false));  
  27.     // 生成的日志文件名称,文件最大值(最小1 * 200 M),扩展50文件个数,不采用立刻写入模式  
  28.   
  29.     // 2.实例化一个layout对象  
  30.     // 2.1创建layout布局格式  
  31.     std::auto_ptr<Layout> playout1(new PatternLayout(format));  
  32.   
  33.     // 3.将layout对象绑定(attach)到appender对象  
  34.     // pappender.setLayout(std::auto_ptr<Layout> layout);  
  35.     pappender1->setLayout(playout1);  
  36.   
  37.     // 4.Logger :记录器,保存并跟踪对象日志信息变更的实体,当你需要对一个对象进行记录时,就需要生成一个logger。  
  38.     Logger rootLogger = Logger::getRoot();  
  39.   
  40.     // 5.将appender对象绑定(attach)到logger对象,如省略此步骤,标准输出(屏幕)appender对象会绑定到logger  
  41.     rootLogger.addAppender(pappender1);  
  42.   
  43.     if (console) {  
  44.         // 1.Appenders :挂接器,与布局器紧密配合,将特定格式的消息输出到所挂接的设备终端 (如屏幕,文件等等)。  
  45.         SharedAppenderPtr pappender2(new ConsoleAppender(falsefalse));  
  46.         std::auto_ptr<Layout> playout2(new PatternLayout(format));  
  47.         pappender2->setLayout(playout2);  
  48.         rootLogger.addAppender(pappender2);  
  49.     }  
  50.   
  51.     // 6.设置logger的优先级,如省略此步骤,各种有限级的消息都将被记录  
  52.     rootLogger.setLogLevel(lv);  
  53. }  
  54.   
  55. Logger GetRootLogger(void) {  
  56.     return Logger::getRoot();  
  57. }  
  58.   
  59. Logger GetSubLogger(const wchar_t* sub) {  
  60.     return Logger::getInstance(sub);  
  61. }  
  62.   
  63. void ShutdownLogger(void) {  
  64.     Logger::getRoot().shutdown();  
  65. }  


Main.cpp

[cpp] view plaincopy
  1. <p>#include "VLog.h"</p><p>int _tmain(int argc, _TCHAR* argv[])  
  2. {  
  3.  // 加入log4cplus  
  4.  // 初始化log4cplus  
  5.  InitLog4cplus(L"main.log");</p><p> // 日志对象:测试一  
  6.  log4cplus::Logger test1 = GetSubLogger(L"test1");  
  7.  // 日志对象:测试一 第一次测试  
  8.  log4cplus::Logger test1_01 = GetSubLogger(L"test1.01");</p><p> // 类型日志记录  
  9.  LOG4CPLUS_DEBUG(test1_01, "you can log like this :" << "hello " << 100 << '!');</p><p> // 关闭日志  
  10.  ShutdownLogger();  
  11. }  
  12. </p>  
0 0