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

其他的你都不用管了。

这里封装了需要读取外部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. java request判断微信客户端访问

    微信客户端访问时候user-agent信息如下: Mozilla/5.0 (Linux; Android 5.0.1; M040 Build/LRX22C) AppleWebKit/537.36 (K ...

  2. [置顶] 程序员必知(三):一分钟知道URI编码(encodeURI)

    因为浏览器会用一些特殊的字符作为特定的意义,所以在要传输的内容上如果有这些特殊的字符的话,就需要对其进行转义才能正确传输,如以下字符为发送时候的关键字,即特殊字符 ;/?:@&=+$,# 所以 ...

  3. excel重复数据

    =COUNTIF(H:H,H1)>1

  4. 判断jsp中是否存在某个javascript函数

    //判断父页是否存在某个javascript函数 function fnExist(fnName) { //return fnName in this && eval(fnName) ...

  5. hi3531的h264压缩中改动波特率

    typedef struct hiVENC_ATTR_H264_CBR_S { HI_U32 u32Gop; HI_U32 u32StatTime; HI_U32 u32ViFrmRate; HI_F ...

  6. mysql 函数在源码中的定义

    大牛那海蓝蓝 MySQL提供了较为丰富的SQL语句,用以支持MySQL提供的主要功能.在数据库内部,MySQL又是怎么知道自己能够处理哪些对象.处理哪些事情的? 如果我们输入一条SQL语句,MySQL ...

  7. Android(java)学习笔记209:采用get请求提交数据到服务器(qq登录案例)

    1.GET请求:    组拼url的路径,把提交的数据拼装url的后面,提交给服务器. 缺点:(1)安全性(Android下提交数据组拼隐藏在代码中,不存在安全问题)  (2)长度有限不能超过4K(h ...

  8. 解决 kindle 书籍字体颜色偏淡问题的方法

    现象 通过Markdown转换而来的mobi格式书籍都有一个大问题:字体偏淡,放在kindle上看对比度很差. 原因分析: 导致这种问题的原因,可能是因为在制作电子书的过程中,这些内容是被标注了彩色或 ...

  9. 纯js写“运动”框架

    所谓“运动”不一定真的是运动,在连续的一段时间内改变某一样式都可以成为“运动”. 先写几个会用到的函数 //获取某一元素的指定样式 function getstyle (element, target ...

  10. div置于页面底部

    一直对于页面置底有一些困惑,下面这个例子不知道能不能解决 <!DOCTYPE html> <html lang="en"> <head> < ...