参考资料: log4cpp 配置 使用http://www.cnblogs.com/welkinwalker/archive/2011/06/23/2088197.html

便利的开发工具-log4cpp快速使用指南

http://www.ibm.com/developerworks/cn/linux/l-log4cpp/

Log4cpp配置文件格式说明

http://sogo6.iteye.com/blog/1154315

使用步骤说明:

1、下载log4cppDLL ,见附件。这里面已经有别人编译完成的.lib与.dll文件。我们拿来用即可。

包含文件如下图所示:

2、打开我们的程序,选中项目,属性,如下图所示

3、选择“c/c++“选项,点开下列菜单,点击”常规“:在“附加包含目录”这一栏中,选择编辑,找到刚刚附件里面的文件夹下面的include菜单。

如下面所示:(我的log4cpp文件放在桌面上,如果想移植时,不改变此输入项,可将log4cpp放在D盘根目录下面即可。)完成之后,点击确定即可。

4、在左边的菜单中,点开“链接器“选项。并点开“常规“选项栏。在附加库目录中,选择log4cpp文件下面的动态库文件.dll。如下图所示:(弄完后,点击确定)

5、在“链接器“菜单下,选择“输入“,在”附加依赖项“中输入log4cppDLLD.lib,(注:通过.lib当中的文件,我们就可以找到DLL中函数的地址,从而引用DLL当中的函数),如下图所示:

6、以上步骤弄完以后,点击确定。然后在选中项目,右击,点击“在windows资源管理器中打开文件“,在此目录下,拷贝两个文件进去。

一个是 log4cppDLLD.dll,动态链接库文件。

一个是 log4cpp.conf, log4cpp的配置文件

此文件见附件。

7、一切准备工作完成之后,下面进入正式编程阶段。

1)在你需要添加日志的文件中,引入下面头文件

#include "log4cpp/Category.hh "
 
#include "log4cpp/FileAppender.hh"
 
#include "log4cpp/SimpleLayout.hh"
 
#include "log4cpp/PropertyConfigurator.hh"
 
#include <log4cpp/Portability.hh>

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

2)在主线程或者副线程中,引入下面日志文件的配置、实例化

// 1 读取解析配置文件
 
// 读取出错, 完全可以忽略,可以定义一个缺省策略或者使用系统缺省策略
 
// BasicLayout输出所有优先级日志到ConsoleAppender
 
try { 
 
log4cpp::PropertyConfigurator::configure("./log4cpp.conf");
 
} catch(log4cpp::ConfigureFailure& f) {
 
std::cout << "Configure Problem " << f.what() << std::endl;
 
return -1;
 
}
 
// 2 实例化category对象
 
// 这些对象即使配置文件没有定义也可以使用,不过其属性继承其父category
 
// 通常使用引用可能不太方便,可以使用指针,以后做指针使用
 
// log4cpp::Category* root = &log4cpp::Category::getRoot();
 
log4cpp::Category& root = log4cpp::Category::getRoot();
 
log4cpp::Category& sub1 = 
 
log4cpp::Category::getInstance(std::string("sub1"));
 
// 3 正常使用这些category对象进行日志处理。
 
// sub1 has appender A1 and rootappender.
 
int i = 1;
 
sub1.info("info: %d ok !",i); //这个和我们的配置文件相关
 

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

3)运行程序,此时会出现以下界面:

选中项目,右击,点击“在windows资源管理器中打开文件“,此时会发现,该目录下,出现了A1.log文件,打开文件出现下面的文字:

The message 'info: 1 ok !' at time 2014-09-02 19:56:55,686[2676]INFO

为什么会出现此信息???

4)打开log4cpp.conf文件,一切秘密皆在此。

我引用的是A1 category,而A1属性如下:

#定义A1的属性

log4j.appender.A1=org.apache.log4j.FileAppender

log4j.appender.A1.fileName=A1.log

appender.A1.layout=org.apache.log4j.PatternLayout

appender.A1.layout.ConversionPattern=The message '%m' at time %d[%t]%p%n

第一行大概意思:输出文件Appender

第二行大概意思:输出文件名字定义为A1.log

第三行大概意思:文件的布局layout方式是PatternLayout模式。模式不同,输出的内容亦有所不同。

第四行大概意思:输出内容。

下面对The message '%m' at time %d[%t]%p%n 这句话做详细说明。

此为输出文件的格式说明符。

其中 %m表示 用户写log的具体信息,也就是我们所要存的内容。

%d 表示 时间戳,精确到ms

%t 表示 线程名

%p 表示 优先级

%n 表示 回车换行符

That is all,thanks。

Log4cpp 使用手册的更多相关文章

  1. zlog使用手册

    zlog使用手册 来源 http://hardysimpson.github.io/zlog/UsersGuide-CN.html Contents Chapter 1  zlog是什么? 1.1   ...

  2. FREERTOS 手册阅读笔记

    郑重声明,版权所有! 转载需说明. FREERTOS堆栈大小的单位是word,不是byte. 根据处理器架构优化系统的任务优先级不能超过32,If the architecture optimized ...

  3. JS魔法堂:不完全国际化&本地化手册 之 理論篇

    前言  最近加入到新项目组负责前端技术预研和选型,其中涉及到一个熟悉又陌生的需求--国际化&本地化.熟悉的是之前的项目也玩过,陌生的是之前的实现仅仅停留在"有"的阶段而已. ...

  4. 转职成为TypeScript程序员的参考手册

    写在前面 作者并没有任何可以作为背书的履历来证明自己写作这份手册的分量. 其内容大都来自于TypeScript官方资料或者搜索引擎获得,期间掺杂少量作者的私见,并会标明. 大部分内容来自于http:/ ...

  5. Redis学习手册(目录)

    为什么自己当初要选择Redis作为数据存储解决方案中的一员呢?现在能想到的原因主要有三.其一,Redis不仅性能高效,而且完全免费.其二,是基于C/C++开发的服务器,这里应该有一定的感情因素吧.最后 ...

  6. JS魔法堂:不完全国际化&本地化手册 之 实战篇

    前言  最近加入到新项目组负责前端技术预研和选型,其中涉及到一个熟悉又陌生的需求--国际化&本地化.熟悉的是之前的项目也玩过,陌生的是之前的实现仅仅停留在"有"的阶段而已. ...

  7. Windows API 函数列表 附帮助手册

    所有Windows API函数列表,为了方便查询,也为了大家查找,所以整理一下贡献出来了. 帮助手册:700多个Windows API的函数手册 免费下载 API之网络函数 API之消息函数 API之 ...

  8. linux命令在线手册

    下面几个网址有一些 Linux命令的在线手册,而且还是中文的,还可以搜索.非常方便 Linux命令手册 Linux命令大全 Linux中文man在线手册 每日一linux命令

  9. Mysql完全手册(笔记二,使用数据与性能优化)

    一.使用数据 1.使用变量 MySQL也可以让我们以用户自定义的变量来存储select查询的结果,以便在将来select查询中使用.它们只会在客户会话期间存在,但是它们提供一个方便有效的方法来连接查询 ...

随机推荐

  1. 爬虫必备:Python 执行 JS 代码 —— PyExecJS、PyV8、Js2Py

    在使用爬虫中,经常会遇到网页请求数据是经过 JS 处理的,特别是模拟登录时可能有加密请求.而目前绝大部分前端 JS 代码都是经过混淆的,可读性极低,想理解代码逻辑需要花费大量时间.这时不要着急使用 S ...

  2. websphere8.5 与cxf2.x冲突问题

    一个客户was部署的小问题,记录一下. 问题现象 在我们的服务中用调用别人的webservice服务报错,框架用的cxf. 报错关键信息有: E com.ibm.ws.webcontainer.web ...

  3. python3--命名空间字典

    命名空间字典 我们学到了模块的命名空间实际上是以字典的形式实现的,并且可以由内置属性__dict__显示这一点.类和实例对象也是如此:属性点号运算其实内部就是字典的索引运算,而属性继承其实就是搜索连结 ...

  4. Educational Codeforces Round 33 (Rated for Div. 2)

    A. Chess For Three time limit per test 1 second memory limit per test 256 megabytes input standard i ...

  5. Playrix Codescapes Cup (Codeforces Round #413, rated, Div. 1 + Div. 2) 一夜回到小学生

    我从来没想过自己可以被支配的这么惨,大神讲这个场不容易掉分的啊 A. Carrot Cakes time limit per test 1 second memory limit per test 2 ...

  6. .NET重构(六):删除用户和结账的理解

    导读:这是第二回机房了,第一回不明不白,不清不楚的就过去了(相对),这一回,有了新的发现.就是在用户删除的时候,涉及到的一些逻辑问题,以及结账时的数据来源问题. 一.用户删除 问题:第一次机房,包括重 ...

  7. 【单调队列优化dp】uestc 594 我要长高

    http://acm.uestc.edu.cn/#/problem/show/594 [AC] #include<bits/stdc++.h> using namespace std; t ...

  8. “a++” 与 “++a” 的区别

    很久不写 C++ 程序,今天测试一段代码的过程中,发现自己连最基础的 C++ 知识都忘了,汗!!! a++ 与 ++a 都是表达式,他们都有值.其中: 1)a++ 的值是 a 的原始值,这个表达式的功 ...

  9. 虚拟机搭建--hyper-V使用教程

    http://jingyan.baidu.com/article/4e5b3e19695d9f91901e24bb.html

  10. STL学习笔记(二) vector和string

    条款13:vector.string优先于动态分配数组 string是basic_string<char>的类型定义许多string的背后实现都采用了引用计数的技术,可以消除不必要的内存拷 ...