zoukankan      html  css  js  c++  java
  • log4cxx入门第一篇--一个小例子

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




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

    摘要

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

    1.介绍

    1.1 简单说明

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

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

       1.2体系结构

         核心类

    Log4cxx有三个关键组件,它们是loggers,appenderslayouts

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

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

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

         配置类

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

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

    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,并键入如下内容:

    #设置rootloggerDEBUG级别,使用了cafa两个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的使用是如此的简单。




  • 相关阅读:
    toj 2819 Travel
    toj 2807 Number Sort
    zoj 2818 Prairie dogs IV
    zoj 1276 Optimal Array Multiplication Sequence
    toj 2802 Tom's Game
    toj 2798 Farey Sequence
    toj 2815 Searching Problem
    toj 2806 Replace Words
    toj 2794 Bus
    css截取字符
  • 原文地址:https://www.cnblogs.com/catkins/p/5270622.html
Copyright © 2011-2022 走看看