快速使用Log4Cpp

封了一下接口,快速使用。

其他的你都不用管了。

这里封装了需要读取外部conf文件配置输出项。否则可以用getInstance初始化日志类

#include "L4Cpp.h"

void CTestAgainDlg::OnBnClickedButton1()
{
    L4Cpp::get()->warn("eeeeeeeee");
}

下面展示了封装以及引用结构

 1 #pragma once
 2 #include "L4Cpp/Category.hh"
 3 
 4 class L4Cpp
 5 {
 6 private:
 7     L4Cpp(){};
 8     static log4cpp::Category* root;
 9 
10 public:
11     //获得日志仓库
12     static log4cpp::Category* get();
13     static void defaultFileInstance();
14     static void defaultSteamInstance();
15 };
L4Cpp.h
 1 //LogFacade.cpp如下:
 2 
 3 #include "StdAfx.h"
 4 #include "L4Cpp.h"
 5 
 6 
 7 #include "L4Cpp/Appender.hh"
 8 #include "L4Cpp/FileAppender.hh"
 9 #include "L4Cpp/OstreamAppender.hh"
10 #include "L4Cpp/NTEventLogAppender.hh"
11 #include "L4Cpp/StringQueueAppender.hh"
12 #include "L4Cpp/RollingFileAppender.hh"
13 //#include "L4Cpp/SyslogAppender.hh"
14 #include "L4Cpp/Layout.hh"
15 #include "L4Cpp/BasicLayout.hh"
16 #include "L4Cpp/SimpleLayout.hh"
17 #include "L4Cpp/PatternLayout.hh"
18 #include "L4Cpp/BasicConfigurator.hh"
19 #include "L4Cpp/PropertyConfigurator.hh"
20 #include "L4Cpp/Priority.hh"
21 #include "L4Cpp/NDC.hh"
22 
23 #include <string.h>
24 
25 
26 #pragma comment(lib,"log4cpp.lib")
27 
28 log4cpp::Category* L4Cpp::root = NULL;
29 
30 log4cpp::Category* L4Cpp::get()    
31 {
32     if (!root)
33     {
34         //debug模式下,配置没找到会跳出runtime 异常,貌似捕获不了。考虑把那里注掉或换成logic_error
35         try { 
36             log4cpp::PropertyConfigurator::configure("./log4cpp1.conf");
37             root = &log4cpp::Category::getRoot();
38         } catch(std::runtime_error e) {
39             //读不到配置文件不操作
40             //但外部调用并不会出错
41         }
42     }
43     return root;
44 }
45 
46 //加载默认配置,输出到同级目录中的logging.log文件
47 void L4Cpp::defaultFileInstance(){
48     if (!root)
49     {
50         log4cpp::Layout* layout = new log4cpp::BasicLayout();    // 1实例化一个layout 对象
51         log4cpp::Appender* appender = new log4cpp::FileAppender("FileAppender",    "./hgsoft.log");     // 2. 初始化一个appender 对象
52         appender->setLayout(layout);     // 3. 把layout对象附着在appender对象上
53         root = &log4cpp::Category::getRoot();// 4. 实例化一个category对象
54         root->setAdditivity(false);     // 5. 设置additivity为false,替换已有的appender
55         root->setAppender(appender);     // 5. 把appender对象附到category上
56         root->setPriority(log4cpp::Priority::DEBUG);     // 6. 设置category的优先级,低于此优先级的日志不被记录
57     }
58 } 
59 
60 void L4Cpp::defaultSteamInstance(){
61     if (!root)
62     {
63         log4cpp::Layout* layout = new log4cpp::BasicLayout();    // 1实例化一个layout 对象
64         log4cpp::Appender* appender = new log4cpp::OstreamAppender("ostream",&std::cout);     // 2. 初始化一个appender 对象
65         appender->setLayout(layout);     // 3. 把layout对象附着在appender对象上
66         root = &log4cpp::Category::getRoot();// 4. 实例化一个category对象
67         root->setAdditivity(false);     // 5. 设置additivity为false,替换已有的appender
68         root->setAppender(appender);     // 5. 把appender对象附到category上
69         root->setPriority(log4cpp::Priority::DEBUG);     // 6. 设置category的优先级,低于此优先级的日志不被记录
70     }
71 } 
L4Cpp.cpp

文件引用架构

还需要改动的地方是原本

#include <log4cpp/****.hh>

需要转换成 引用本地的头文件

#include "L4Cpp/****.hh"

库文件在L4Cpp.cpp中通过#pragma comment(lib,"log4cpp.lib") 引用了

拓展阅读:

http://www.ibm.com/developerworks/cn/linux/l-log4cpp/

http://log4cpp.sourceforge.net/

原文地址:https://www.cnblogs.com/Again/p/5394139.html