Log4cxx

Log4cxx是开放源代码项目Apache Logging Service的子项目之一,是Java社区著名的log4j的c++移植版,用于为C++程序提供日志功能,以便开发者对目标程序进行调试和审计。 有关log4cxx的更多信息可以从Apache Logging Service的网站http://logging.apache.org获得。当前的稳定版本为0.9.7(不过据说当用在多线程时有严重的内存泄漏,不过不影响我们借鉴学习),开发者可以通过svn http://svn.apache.org/repos/asf/logging/log4cxx/trunk获得最新的0.10.0版本

Log4cxx主要框架由三部分组成: Loggers, Appenders,Layouts

  • Loggers:日志记录者,默认会有一个rootLogger,可通过getRootLogger()得到。所有的Loggers都存在继承关系,与之对应的Level如果没有指定,则继承父级。Log4cxx中预定义了TRACE, DEBUG, INFO, WARN, ERROR ,FATAL六种Level,可以通过配置文件中设置Logger的Level。
  • Appenders:每个logger可以附加多个Appender。控制日志的输出途径,可以有以下几种方式:console, files, remote socket servers, NT Event Loggers, and remote UNIX Syslog daemons。Appenders也是存在继承关系的,如果没有指定,则继承父级。可以通过配置文件设置Appenders的属性。
  • Layouts: 对于每一种appender,都可以通过layout进行格式设置。可以通过配置文件设置Layouts的格式。

上面说道配置文件,这可是关键之处,通过配置文件可以达到运行时更改log输出,灵活的输出方式,输出性能的提高等。现在版本支持XML格式和Java properties (key=value)格式。这里我选择的时properties格式。(注:properties中如果配置多用户时会出错,这应该是Log4cxx的一个bug,在官方的Mailing List中可以找到有关这个问题的讨论,不过貌似还没有找到解决方法)下面我们看看具体的properties文件:filaname.properties

[ code ]

# 设置root logger为DEBUG级别,使用了ca和fa两个Appender
log4j.rootLogger
= INFO , fa , ca

#设置spirit为TRACE级别

log4j.spirit
=TRACE
#log4j.additivity.spirit
=false

#对Appender ca进行设置:
#这是一个控制台类型的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

#对Appender fa进行设置:
# 这是一个文件类型的Appender,
# 其输出文件(File)为./debug.log,
# 输出方式(Append)为覆盖方式,
# 输出格式(layout)为PatternLayout
log4j.appender.fa
=org.apache.log4j.FileAppender
log4j.appender.fa.File
=./debug.log
log4j.appender.fa.Append
=true
log4j.appender.fa.layout
=org.apache.log4j.PatternLayout
log4j.appender.fa.layout.ConversionPattern
=%d [%t] %-5p %.16c %x - %m%n

[/code]

 

注:如果将rootLogger的fa和ca去掉,并将其加到log4j.spirit=TRACE,fa,ca就 会在程序运行时提示找不到spirit 对应的Appender。可是按照官方文档中的说明,这里spirit没有从rootLooger中继承任何Appender,它有自己的Appender,所以应该可以正常显示。如果设置成Log4j.rootLogger=INFO,ca和log4j.spirit=TRACE,fa,则只能在控制台中显示信息,不能保存到文件中。所以暂时的解决方法就是在properties中只设置一个用户,至于其他方法,再找吧!

好了,我们看看怎么在自己的工程中使用Log4cxx:

#include  < string >
#include 
< iostream >
using   namespace  std;

#include 
< log4cxx / logger.h >
#include 
< log4cxx / propertyconfigurator.h >
using   namespace  log4cxx;
using   namespace  log4cxx::helpers;

void  main()
{
    String trace 
= _T("spirit");
    String Property 
= _T("E:/spirit_only/Test_log4cxx/filename.properties");

    PropertyConfigurator::configure(Property);

    LoggerPtr traceLogger 
= Logger::getLogger(trace);
    traceLogger
->info(_T("How to use?"));
       //如果是0.9.7版本,不要使用
LOG4CXX_INFO(traceLogger,_T("How to use?"));这样会造成内存泄漏

}

 

OK.基本自己也是刚开始使用,就先到这里。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值