先看官网: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. Membership三步曲之入门篇 - Membership基础示例

    Membership 三步曲之入门篇 - Membership基础示例 Membership三步曲之入门篇 -  Membership基础示例 Membership三步曲之进阶篇 -  深入剖析Pro ...

  2. spring boot(一):入门篇

    构建微服务:Spring boot 入门篇 什么是spring boot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框 ...

  3. 1. web前端开发分享-css,js入门篇

    关注前端这么多年,没有大的成就,就入门期间积累了不少技巧与心得,跟大家分享一下,不一定都适合每个人,毕竟人与人的教育背景与成长环境心理活动都有差别,但就别人的心得再结合自己的特点,然后探索适合自己的学 ...

  4. 一个App完成入门篇(七)- 完成发现页面

    第七章是入门篇的倒数第二篇文章了,明天整个APP将进入收官. 本节教程主要要教会大家使用二维码扫描和用do_WebView组件加在html页面. 导入项目 do_WebView组件 扫描功能 自定义事 ...

  5. [原创]Linq to xml增删改查Linq 入门篇:分分钟带你遨游Linq to xml的世界

    本文原始作者博客 http://www.cnblogs.com/toutou Linq 入门篇(一):分分钟带你遨游linq to xml的世界 本文原创来自博客园 请叫我头头哥的博客, 请尊重版权, ...

  6. 转:OSGi 入门篇:模块层

    OSGi 入门篇:模块层 1 什么是模块化 模块层是OSGi框架中最基础的一部分,其中Java的模块化特性在这一层得到了很好的实现.但是这种实现与Java本身现有的一些模块化特性又有明显的不同. 本文 ...

  7. 转:OSGi 入门篇:生命周期层

    OSGi 入门篇:生命周期层 前言 生命周期层在OSGi框架中属于模块层上面的一层,它的运作是建立在模块层的功能之上的.生命周期层一个主要的功能就是让你能够从外部管理应用或者建立能够自我管理的应用(或 ...

  8. 【three.js详解之一】入门篇

    [three.js详解之一]入门篇   开场白 webGL可以让我们在canvas上实现3D效果.而three.js是一款webGL框架,由于其易用性被广泛应用.如果你要学习webGL,抛弃那些复杂的 ...

  9. [Maven]Apache Maven 入门篇

    作者:George Ma 上 写这个 maven 的入门篇是因为之前在一个开发者会的动手实验中发现挺多人对于 maven 不是那么了解,所以就有了这个想法.这个入门篇分上下两篇.本文着重动手,用 ma ...

随机推荐

  1. Exercise : Self-Taught Learning

    First, you will train your sparse autoencoder on an "unlabeled" training dataset of handwr ...

  2. PatentTips - Transparent unification of virtual machines

    BACKGROUND Virtualization technology enables a single host computer running a virtual machine monito ...

  3. linux6.0系统如何安装portmap

    因为在6.0的系统里,portmap已经改名了.在Redhat或CentOS5中可以使用 service portmap start启动服务,然后在启动nfs服务,实现挂载. 6里面可是试试 serv ...

  4. 《深入理解java虚拟机》学习笔记四/垃圾收集器GC学习/一

    Grabage Collection      GC GC要完毕的三件事情: 哪些内存须要回收? 什么时候回收? 怎样回收? 内存运行时区域的各个部分中: 程序计数器.虚拟机栈.本地方法栈这3个区域随 ...

  5. 每位iOS开发者不容错过的10大有用工具

    内容简单介绍 1.iOS简单介绍 2.iOS开发十大有用工具之开发环境 3.iOS开发十大有用工具之图标设计 4.iOS开发十大有用工具之原型设计 5.iOS开发十大有用工具之演示工具 6.iOS开发 ...

  6. JavaScript--数据结构之栈

    4.1栈是一种高效的数据结构,是一种特殊的列表.栈内元素只能通过列表的一端访问,也就称为栈顶.后入的先出的操作.Last in First out.所以他的访问每次是访问到栈顶的元素,要想访问其余的元 ...

  7. 洛谷 P1207 [USACO1.2]双重回文数 Dual Palindromes

    P1207 [USACO1.2]双重回文数 Dual Palindromes 题目描述 如果一个数从左往右读和从右往左读都是一样,那么这个数就叫做“回文数”.例如,12321就是一个回文数,而7777 ...

  8. [Node.js] Serve Static Files with Express

    In this lesson we will find out how to serve static assets (images, css, stylesheets, etc.) with Exp ...

  9. 1.1 Introduction中 Putting the Pieces Together官网剖析(博主推荐)

    不多说,直接上干货! 一切来源于官网 http://kafka.apache.org/documentation/ Putting the Pieces Together 拼在一起 This comb ...

  10. 前端面试题(HTML/CSS)

    (前端面试题大全,持续更新) 常用的块级元素和行内元素有哪些?说说他们的特点? 浮动产生的原因?清除浮动? 说说一下盒模型 float和position一起用是什么效果 rem用过吗?做不同手机的适配 ...