先看官网:http://logging.apache.org/log4cxx/index.html

转载自:http://wenku.baidu.com/view/d88ab5a9d1f34693daef3e62.html

摘要

Log4cxx是开放源代码项目ApacheLoggingService的子项目之一,用于为C++程序提供日志功能,以便开发者对目标程序进行调试和审计。本文对log4cxx的使用及配置进行介绍,并给出一个可以快速开始的实例。最后,针对日志服务给出一些实践方面的建议。

1.介绍

1.1 简单说明

Log4cxx是开放源代码项目ApacheLoggingService的子项目之一,是Java社区著名的log4j的c++移植版,用于为C++程序提供日志功能,以便开发者对目标程序进行调试和审计。

有关log4cxx的更多信息可以从ApacheLogginService的网站http://logging.apache.org获得。

1.2体系结构

核心类

Log4cxx有三个关键组件,它们是loggers,appenders和layouts。

Logger是log4cxx的核心类,只要执行日志操作;looger有层次结构,最顶层为RootLogger;logger是有级别的。logger是分七个级别,分别是debug、info、warn、error、fatal、all、off,最常用的应该是debug()和info();而warn()、error()、fatal()仅在相应事件发生后才使用。每个logger可以附加多个Appender。Appender代表了日志输出的目标,如输出到文件、控制台等等。对于每一种appender,都可以通过layout进行格式设置。

这三类组件用示意图表示如下(不代表类关系):

(TODO:在此对三种组件分别进行说明)

配置类

此外在使用中还会用到的类有BasicConfigurator、PropertyConfigurator和DOMConfigurator等,用于对log4cxx进行配置。其中:

BasicConfigurator提供了一种简单配置,包括使用ConsoleAppder作为rootappender和PatternLayout作为缺省布局。

PropertyConfigurator使用properties文件作为配置方式。

DOMConfigurator则使用properties文件作为配置方式。

(TODO:在此对配置内容进行说明)

2.安装(by crazyhacking)

     直接使用yum安装log4cxx.x86_64(库文件) ,log4cxx-devel.x86_64(头文件) 

3.示例代码

本节展示了一个最简单的log4cxx示例,以便你可以快速的了解它。

该示例在功能上创建了一个日志服务,该日志可通过配置文件进行必要控制,并可以同时向文件和控制台输出信息。

在实现上,我们采用了一个简单的控制台程序,并使用动态链接库的方式使用log4cxx。

要实现这个目标,请按如下步骤进行:

1)创建一个名为logdemo的空白win32控制台工程,并按照2.3节所述内容对其进行设置。注意,这里我们使用动态连接口的方式。

2)在logdemo.cpp中加入实现日志功能的代码。完成后的代码清单如下:

#include"stdafx.h"

#include<log4cxx/logger.h>

#include<log4cxx/propertyconfigurator.h>

usingnamespacelog4cxx;

int_tmain(intargc,_TCHAR*argv[])

{

//加载log4cxx的配置文件,这里使用了属性文件

PropertyConfigurator::configure("log4cxx.properties");

//获得一个Logger,这里使用了RootLogger

LoggerPtrrootLogger = Logger::getRootLogger();

//发出INFO级别的输出请求

LOG4CXX_INFO(rootLogger,_T("它的确工作了"));

//rootLogger->info(_T("它的确工作了"));//与上面那句话功能相当

return0;

}

以Debug方式编译工程,调试程序直到成功为止。

3)新建一个文本文件,命名为log4cxx.properties,并键入如下内容:

#设置rootlogger为DEBUG级别,使用了ca和fa两个Appender

log4j.rootLogger=DEBUG,ca, fa

#对Appenderfa进行设置:

#这是一个文件类型的Appender,

#其输出文件(File)为./output.log,

#输出方式(Append)为覆盖方式,

#输出格式(layout)为PatternLayout

log4j.appender.fa=org.apache.log4j.FileAppender

log4j.appender.fa.File=./output.log

log4j.appender.fa.Append=false

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

log4j.appender.fa.layout.ConversionPattern=%d[%t] %-5p %.16c - %m%n

#对Appenderca进行设置:

#这是一个控制台类型的Appender

#输出格式(layout)为PatternLayout

log4j.appender.ca=org.apache.log4j.ConsoleAppender

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

log4j.appender.ca.layout.ConversionPattern=%d[%t] %-5p %.16c - %m%n

4)复制log4cxx.dll到输出目录。在动态链接方式下,应用程序需要能够找到这个库文件。

5)运行生成的logdemo.exe文件,查看一下运行结果,看看我们工作有没有取得成效。如果一切顺利,无论是在控制台还是在输出文件中,都应该能看到类似下面那样的输出内容:

2006-06-0216:09:50,609 [2528] INFO root -它的确工作了

4.实践指导

在项目中是否使用日志,以及如何使用日志,对开发者来说都是一个需要做出的技术选择,这通常会牵扯到系统的性能,使用日志的目的等问题。我们使用日志的方式,有些是这个行业积累了多年的经验,有些则纯粹关乎个人的喜好。

1)何时使用日志

通常情况下,日志的作用在于调试和审计,如果你的项目对此有特殊需求,即可考虑使用日志。

对于调试,通常用于IDE调试器无法达到的地方。一些常见的场景包括:

分布式组件的调试。在服务器端的组件,需要通过客户端的调用来验证其工作是否正确,此时利用日志的输出作为辅助工具对错误进行诊断。

链接库调试。在无法跟踪进外部库中的情况下,这种方法非常有效。

生产环境下的调试。生产环境通常是指产品在客户处处于正式运行的状态,在出现问题时,开发者常常不在现场,借助日志的输出进行错误判断就是一个非常有效的手段。

对于审计应用,则需要视特定的情况而定,程序级的记录能力,无疑可以作为业务级审计手段的有效补充。

无论是在哪种场景下,log4cxx都是可以胜任工作的,这取决于它的灵活的配置能力及多种类型的输出方式。

2)性能问题

关闭日志,通过配置文件设置日志的关闭和打开

使用宏代替logger的输出命令

选择性输出日志。建立logger的层次结构,根据级别选择性输出

输出目标。尽可能减少输出目标

选择合适的输出格式。使用SimpleLayout将达到与std::cout相当的速度。

3)其它

使用类的全限定名对logger命名

5.结论

Log4cxx具有的一些显著特性使得C++者可以将其放入自己的工具箱中,这些特性包括灵活的配置能力,多种输出手段,丰富的格式控制,出色的性能。如果在你的开发中需要借助于日志进行调试和审计,你也许需要log4cxx。最后,重要的一点是,如你所见,log4cxx的使用是如此的简单。

log4cxx入门第一篇--一个小例子的更多相关文章

  1. 自定义View4-塔防小游戏第一篇:一个防御塔+多个野怪(简易版)*

    塔防小游戏 第一篇:一个防御塔+多个野怪(简易版)    1.canvas画防御塔,妖怪大道,妖怪行走路线    2.防御塔攻击范围是按照妖怪与防御塔中心距离计算的,大于防御塔半径则不攻击,小于则攻击 ...

  2. Flink入门-第一篇:Flink基础概念以及竞品对比

    Flink入门-第一篇:Flink基础概念以及竞品对比 Flink介绍 截止2021年10月Flink最新的稳定版本已经发展到1.14.0 Flink起源于一个名为Stratosphere的研究项目主 ...

  3. ElasticSearch入门 第一篇:Windows下安装ElasticSearch

    这是ElasticSearch 2.4 版本系列的第一篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...

  4. java连接mysql的一个小例子

    想要用java 连接数据库,需要在classpath中加上jdbc的jar包路径 在eclipse中,Project的properties里面的java build path里面添加引用 连接成功的一 ...

  5. java操作xml的一个小例子

    最近两天公司事比较多,这两天自己主要跟xml打交道,今天更一下用java操作xml的一个小例子. 原来自己操作xml一直用这个包:xstream-1.4.2.jar.然后用注解的方式,很方便,自己只要 ...

  6. MVVM模式的一个小例子

    使用SilverLight.WPF也有很长时间了,但是知道Binding.Command的基本用法,对于原理性的东西,一直没有深究.如果让我自己建一个MVVM模式的项目,感觉还是无从下手,最近写了一个 ...

  7. 使用Trinity拼接以及分析差异表达一个小例子

    使用Trinity拼接以及分析差异表达一个小例子  2017-06-12 09:42:47     293     0     0 Trinity 将测序数据分为许多独立的de Brujin grap ...

  8. Jmeter Web 性能测试入门 (四):一个小实例带你学会 Jmeter 脚本编写

    测试场景: 模拟并发100个user,在TesterHome 站内搜索VV00CC 添加线程组 添加HTTP信息头管理器 添加HTTP Sampler 填写HTTP Sampler中的信息 添加监听器 ...

  9. Hibernate入门1 - Hibernate概述及第一个小例子

    一.什么是ORM? ORM,即Object Relational Mapping.我们知道,利用面向对象的思想编写的数据库应用程序最终都是把对象信息保存在关系型数据库中,于是需要编写与底层数据库相关的 ...

随机推荐

  1. 最大边和最小边之差最小的生成树 UVA 1394

    题目大意:给你n个点的图,求苗条度(最大边减最小编)尽量小的生成树 思路:sort以后暴力枚举区间即可 //看看会不会爆int!数组会不会少了一维! //取物问题一定要小心先手胜利的条件 #inclu ...

  2. Java学习笔记之Scanner报错java.util.NoSuchElementException

    转载自:IT学习者-螃蟹 一个方法A使用了Scanner,在里面把它关闭了.然后又在方法B里调用方法A之后就不能再用Scanner了Scanner in = new Scanner(System.in ...

  3. TOMCAT-publishing to tomcat v7.0 server at

    因为tomcat的work文件没有清空,导致MyEclipse部署在server.xml文件中的项目路径是错误的. 解决办法:清空work文件夹 下面这个勾勾是MyEclipse自动发布项目路径的选项

  4. 用GeneratedKeyHolder获得新建数据主键值

    public User createUser(final User user) { final String sql = "insert into sys_users(username, p ...

  5. linux命令-sed,uniq,cut,wc

    sort sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出.如果 File 参数指定多个文件,那么 sort 命令将这些文件连接起来,并当作一个文件进行排序. sort语法 ...

  6. HDU - 5276 YJC tricks time

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5276   Sample Input 99000 0   Sample Output 00:01:30 ...

  7. ubuntu apache 安装awstats 流量分析工具(命令方式)

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...

  8. 转:jmeter实践

    本文主要介绍性能测试中的常用工具jmeter的使用方式,以方便开发人员在自测过程中就能自己动手对系统进行自动压测和模拟用户操作访问请求.最后还用linux下的压测工具ab做了简单对比. 1.      ...

  9. 使用libvirt做适配的kvm虚拟机window server 2008 磁盘性能的提升

    实验室自己做了一个iaas的项目,当时是为了更方面的在kvm和xen下进行迁移,所以选择了libvirt作为适配层. 昨天简单的测试一了一下我们跟qingcloud的性能对比.我们的linux主机性能 ...

  10. HDU 2675 Equation Again

    公式转化+二分答案 首先,把题目中给的等式转化一下,变成了这个样子. 等式右边的值是可以求出来的. ln(x)/x的大致图像是这样的 那么只要对[0,e]和[e,+∞]分别进行二分答案即可. #inc ...