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

其他的你都不用管了。

这里封装了需要读取外部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/

快速使用Log4Cpp的更多相关文章

  1. Log4cpp配置文件格式说明

    Log4cpp配置文件格式说明 博客分类: log4cpp log4cpp  log4cpp有3个主要的组件:categories(类别).appenders(附加目的地).和 layouts(布局) ...

  2. Log4cpp介绍及使用

    Log4cpp是一个开源的C++类库,它提供了在C++程序中使用日志和跟踪调试的功能.使用log4cpp,可以很便利地将日志或者跟踪调试信息写入字符流.内存字符串队列.文件.回滚文件.调试器.Wind ...

  3. CMake快速入门教程:实战

    转自http://blog.csdn.net/ljt20061908/article/details/11736713 0. 前言    一个多月前,由于工程项目的需要,匆匆的学习了一下cmake的使 ...

  4. 【转】 log4cpp 的使用

    [转自] http://sogo6.iteye.com/blog/1154315     Log4cpp配置文件格式说明   log4cpp有3个主要的组件:categories(类别).append ...

  5. CMake快速入门教程-实战

    http://www.ibm.com/developerworks/cn/linux/l-cn-cmake/ http://blog.csdn.net/dbzhang800/article/detai ...

  6. Log4Cpp的使用(转)

    本文介绍如何使用Log4CPP. Log4Cpp介绍 Log4Cpp的Api接口可以在http://log4cpp.sourceforge.net/api/index.html中查询得到. Log4C ...

  7. 转:CMake快速入门教程-实战

    CMake快速入门教程:实战 收藏人:londonKu     2012-05-07 | 阅:10128  转:34    |   来源   |  分享               0. 前言一个多月 ...

  8. [转]CMake快速入门教程:实战

    转自http://blog.csdn.net/ljt20061908/article/details/11736713 0. 前言    一个多月前,由于工程项目的需要,匆匆的学习了一下cmake的使 ...

  9. Log4cpp 使用手册

    参考资料: log4cpp 配置 与 使用http://www.cnblogs.com/welkinwalker/archive/2011/06/23/2088197.html 便利的开发工具-log ...

随机推荐

  1. ios 好去处

    1.王巍的博客(我们都叫它喵神,他很萌哒) 链接:http://onevcat.com/ (难度指数:※※※※※)理由:他的swift的新书讲解的非常好,但不适合入门,进阶的话这是很适合的一本书.其他 ...

  2. Oracle Tnsping慢

    http://www.linuxidc.com/Linux/2014-02/96167.htm http://www.askmaclean.com/archives/dns%E8%AE%BE%E7%B ...

  3. jenkens构建脚本

    Build   Root POM   Goals and options Command # consts SERVER="192.168.60.209" DEPLOY=" ...

  4. Qt树形控件QTreeView使用1——节点的添加删除操作 复选框的设置

    QtreeView是ui中最常用的控件,Qt中QTreeWidget比QTreeView更简单,但没有QTreeView那么灵活(QTreeWidget封装的和MFC的CTreeCtrl很类似,没有m ...

  5. cocos2d-x之CCMotionStreak类——2013-08-25 16

      在游戏的实现过程中,有时会需要在某个游戏对象上的运动轨迹上实现渐隐效果.这种感觉就好像是类似飞机拉线的拖尾巴,在视觉上感觉很好,比如子弹的运动轨迹等,如果不借助引擎的帮助,这种效果往往需要通过大量 ...

  6. 如何在mysql命令窗口获取到程序正在执行的sql语句

    步骤: 1.进入mysql的命令窗口: 2.运行use information_schema; 3.运行select * from PROCESSLIST where info is not null ...

  7. javascript进击(七)Ajax

    AJAX AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML). AJAX 不是新的编程语言,而是一种使用现有标准的新方法. AJA ...

  8. bit,byte,char,string区别与基本类型认识

    bit.byte.位.字节.汉字的关系 1 bit     = 1  二进制数据        1 byte  = 8  bit        1 字母 = 1  byte = 8 bit       ...

  9. C#三元运算符

    ?:表达式1?表达式2:表达式3如果1为真则执行2,为假执行3

  10. 新增的html5中js获取方法

    一.querySelector   获取的选择器与jquery的选择器相同