封了一下接口,快速使用。
其他的你都不用管了。
这里封装了需要读取外部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 #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 }
文件引用架构
还需要改动的地方是原本
#include <log4cpp/****.hh>
需要转换成 引用本地的头文件
#include "L4Cpp/****.hh"
库文件在L4Cpp.cpp中通过#pragma comment(lib,"log4cpp.lib") 引用了
拓展阅读: