封了一下接口,快速使用。
其他的你都不用管了。
这里封装了需要读取外部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 };
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 #include24 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_error35 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,替换已有的appender55 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,替换已有的appender68 root->setAppender(appender); // 5. 把appender对象附到category上69 root->setPriority(log4cpp::Priority::DEBUG); // 6. 设置category的优先级,低于此优先级的日志不被记录70 }71 }
文件引用架构
还需要改动的地方是原本
#include <log4cpp/****.hh>
需要转换成 引用本地的头文件
#include "L4Cpp/****.hh"
库文件在L4Cpp.cpp中通过#pragma comment(lib,"log4cpp.lib") 引用了
拓展阅读: