快速使用Log4Cpp
封了一下接口,快速使用。
其他的你都不用管了。
这里封装了需要读取外部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的更多相关文章
- Log4cpp配置文件格式说明
Log4cpp配置文件格式说明 博客分类: log4cpp log4cpp log4cpp有3个主要的组件:categories(类别).appenders(附加目的地).和 layouts(布局) ...
- Log4cpp介绍及使用
Log4cpp是一个开源的C++类库,它提供了在C++程序中使用日志和跟踪调试的功能.使用log4cpp,可以很便利地将日志或者跟踪调试信息写入字符流.内存字符串队列.文件.回滚文件.调试器.Wind ...
- CMake快速入门教程:实战
转自http://blog.csdn.net/ljt20061908/article/details/11736713 0. 前言 一个多月前,由于工程项目的需要,匆匆的学习了一下cmake的使 ...
- 【转】 log4cpp 的使用
[转自] http://sogo6.iteye.com/blog/1154315 Log4cpp配置文件格式说明 log4cpp有3个主要的组件:categories(类别).append ...
- CMake快速入门教程-实战
http://www.ibm.com/developerworks/cn/linux/l-cn-cmake/ http://blog.csdn.net/dbzhang800/article/detai ...
- Log4Cpp的使用(转)
本文介绍如何使用Log4CPP. Log4Cpp介绍 Log4Cpp的Api接口可以在http://log4cpp.sourceforge.net/api/index.html中查询得到. Log4C ...
- 转:CMake快速入门教程-实战
CMake快速入门教程:实战 收藏人:londonKu 2012-05-07 | 阅:10128 转:34 | 来源 | 分享 0. 前言一个多月 ...
- [转]CMake快速入门教程:实战
转自http://blog.csdn.net/ljt20061908/article/details/11736713 0. 前言 一个多月前,由于工程项目的需要,匆匆的学习了一下cmake的使 ...
- Log4cpp 使用手册
参考资料: log4cpp 配置 与 使用http://www.cnblogs.com/welkinwalker/archive/2011/06/23/2088197.html 便利的开发工具-log ...
随机推荐
- 如何生成一副Poker
import java.util.LinkedList;import java.util.Random;//扑克类class Poker{ String color;//花色 String ...
- 淘宝HSF服务的原理以及简单的实现
淘宝HSF服务具体来说分三个应用:api接口,service服务,本地应用. 最基本的Api服务应该是十分干净的,不含方法,只有接口.它是要被打包(jar包的形式)到中央仓库去的. service服务 ...
- C#获取内存图像数据流的方法
背景:有的时候我们已经得到一个图像的内存对象,如Bitmap对象,我们想要获取到这个对象的数据流,可以将其序列化到磁盘上,并且也可以反序列化为内存对象,这个时候就有了如题的问题出现,我搜遍全网就是没有 ...
- C# 算速表达式
public object ComputeExpression(string expression) { var result = new ...
- C++ Code_combobox
主题 1. 代码设置组合框风格 2. 调整组合框列表部分大小 3. 代码设置组合框相关属性 4. 自绘组合框 5. 用代码让combobox的的列表弹出 6. 不添加重复项目 代码 ...
- Hadoop与分布式开发
hadoop上的并行应用程序开发是基于MapReduce编程框架的,MapReduce编程模型的原理是:利用一个输入的key/value对集合来产生一个输出的key/value对集合. Map ...
- Ubuntu 12.04 升级到14.04之后,pidgin-sipe 出现的问题: Trouble with the pidgin and self-signed SSL certificate
Once again, I run into trouble when upgrading my LinuxMint. In last few days, my Linux mint notifies ...
- 机器学习算法-K-means聚类
引文: k均值算法是一种聚类算法.所谓聚类.他是一种无监督学习,将类似的对象归到同一个蔟中.蔟内的对象越类似,聚类的效果越好. 聚类和分类最大的不同在于.分类的目标事先已知.而聚类则不一样. 由于其产 ...
- android96 内存创建图片副本,画画板
package com.itheima.copy; import android.os.Bundle; import android.app.Activity; import android.grap ...
- [转] Spring - Java Based Configuration
PS: Spring boot注解,Configuration是生成一个config对象,@Bean指定对应的函数返回的是Bean对象,相当于XML定义,ConfigurationProperties ...