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

其他的你都不用管了。

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

#include "L4Cpp.h"

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

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

 #pragma once
#include "L4Cpp/Category.hh" class L4Cpp
{
private:
L4Cpp(){};
static log4cpp::Category* root; public:
//获得日志仓库
static log4cpp::Category* get();
static void defaultFileInstance();
static void defaultSteamInstance();
};

L4Cpp.h

 //LogFacade.cpp如下:

 #include "StdAfx.h"
#include "L4Cpp.h" #include "L4Cpp/Appender.hh"
#include "L4Cpp/FileAppender.hh"
#include "L4Cpp/OstreamAppender.hh"
#include "L4Cpp/NTEventLogAppender.hh"
#include "L4Cpp/StringQueueAppender.hh"
#include "L4Cpp/RollingFileAppender.hh"
//#include "L4Cpp/SyslogAppender.hh"
#include "L4Cpp/Layout.hh"
#include "L4Cpp/BasicLayout.hh"
#include "L4Cpp/SimpleLayout.hh"
#include "L4Cpp/PatternLayout.hh"
#include "L4Cpp/BasicConfigurator.hh"
#include "L4Cpp/PropertyConfigurator.hh"
#include "L4Cpp/Priority.hh"
#include "L4Cpp/NDC.hh" #include <string.h> #pragma comment(lib,"log4cpp.lib") log4cpp::Category* L4Cpp::root = NULL; log4cpp::Category* L4Cpp::get()
{
if (!root)
{
//debug模式下,配置没找到会跳出runtime 异常,貌似捕获不了。考虑把那里注掉或换成logic_error
try {
log4cpp::PropertyConfigurator::configure("./log4cpp1.conf");
root = &log4cpp::Category::getRoot();
} catch(std::runtime_error e) {
//读不到配置文件不操作
//但外部调用并不会出错
}
}
return root;
} //加载默认配置,输出到同级目录中的logging.log文件
void L4Cpp::defaultFileInstance(){
if (!root)
{
log4cpp::Layout* layout = new log4cpp::BasicLayout(); // 1实例化一个layout 对象
log4cpp::Appender* appender = new log4cpp::FileAppender("FileAppender", "./hgsoft.log"); // 2. 初始化一个appender 对象
appender->setLayout(layout); // 3. 把layout对象附着在appender对象上
root = &log4cpp::Category::getRoot();// 4. 实例化一个category对象
root->setAdditivity(false); // 5. 设置additivity为false,替换已有的appender
root->setAppender(appender); // 5. 把appender对象附到category上
root->setPriority(log4cpp::Priority::DEBUG); // 6. 设置category的优先级,低于此优先级的日志不被记录
}
} void L4Cpp::defaultSteamInstance(){
if (!root)
{
log4cpp::Layout* layout = new log4cpp::BasicLayout(); // 1实例化一个layout 对象
log4cpp::Appender* appender = new log4cpp::OstreamAppender("ostream",&std::cout); // 2. 初始化一个appender 对象
appender->setLayout(layout); // 3. 把layout对象附着在appender对象上
root = &log4cpp::Category::getRoot();// 4. 实例化一个category对象
root->setAdditivity(false); // 5. 设置additivity为false,替换已有的appender
root->setAppender(appender); // 5. 把appender对象附到category上
root->setPriority(log4cpp::Priority::DEBUG); // 6. 设置category的优先级,低于此优先级的日志不被记录
}
}

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/

最新文章

  1. 公司系统的license授权
  2. idea community 配置已有的scala工程
  3. BIOS设置第一启动项
  4. sql替换指定字段指定字符串
  5. CSU 1116 Kingdoms
  6. Android如何创建背景透明的Dialog
  7. 《互联网初创企业password》书评
  8. JSP标签编程--简单标签
  9. JAVA基础——Arrays工具类十大常用方法
  10. hexo部署github和gitment操作简单介绍
  11. JS实现定时器
  12. curl: (48) An unknown option was passed in to libcurl怎么解决
  13. 单元测试-代码覆盖率 EclEmma
  14. span 英文数字保持一行,中文自动换行
  15. git push error:error: insufficient permission for adding an object to repository database ./object解决
  16. iOS实现基于VLC播放器的封装效果
  17. UGUI Auto Layout 自动布局
  18. markdown 语法备忘
  19. selenium 中装饰器作用
  20. Hardcoded string should use @string resource 警告

热门文章

  1. vue相关
  2. c++ template笔记
  3. children真的没有兼容性问题吗?
  4. onSubmit的使用
  5. CRF++使用小结(转)
  6. 关于字符串计算size的方法比较
  7. mysqlbinlog 用法
  8. easyui-textbox
  9. C# Quartz.Net 定时任务的简单使用
  10. VS2010常用插件介绍之Javascript插件(一)