log4cpp之配置文件使用方法

本文转载自:http://www.cnblogs.com/welkinwalker/archive/2011/06/23/2088197.html

    另一个非常优秀的特征就是通过读取配置文件,确定category、appender、layout等对象。也是我们非常推荐的使用方式,可以灵活地通过配置文件定义所有地对象及其属性,不用重新编码,动态更改日志记录的策略。

    Log4cpp主要提供了 log4cpp::PropertyConfigurator 和log4cpp::SimpleConfigurator两种机制(文件格式),但 log4cpp::SimpleConfigurator将来不再支持了,而且格式非常简单,这里就不多说明,自己看源码吧。

    配置文件的格式和log4j的配置文件一样,是标准的java属性文件格式。下面是附带的例子配置文件:

# 定义了3个category sub1, sub2, sub3
# 其中sub2和sub3设置了additivity属性为false;sub1的additivity属性默认为true
rootCategory
=DEBUG, rootAppender

category.sub1
=,A1

category.sub2
=INFO, A2
additivity.sub2
=false

category.sub3
=ERROR, A3
additivity.sub3
=false

# 定义rootAppender类型和layout属性,这里使用了
BasicLayout
appender.rootAppender
=org.apache.log4cpp.ConsoleAppender
appender.rootAppender.layout
=org.apache.log4cpp.

#定义A1的属性,这里使用了SimpleLayout

appender.A1=org.apache.log4cpp.FileAppender
appender.A1.fileName
=./log/A1.log
appender.A1.layout
=org.apache.log4cpp.SimpleLayout

#定义A2的属性,这里使用了PatternLayout

appender.A2=org.apache.log4cpp.ConsoleAppender
appender.A2.layout
=org.apache.log4cpp.PatternLayout
appender.A2.layout.ConversionPattern
=The message '%m' at time %d%n

#定义A3的属性
appender.A3
=org.apache.log4cpp.RollingFileAppender
appender.A3.fileName
=./log/A3.log
appender.A3.maxFileSize
=50
appender.A3.maxBackupIndex
=3
appender.A3.backupPattern
=%Y-%m-%d
appender.A3.layout
=org.apache.log4cpp.PatternLayout
appender.A3.layout.ConversionPattern
=%d{%Y-%m-%%H:%M:%S} [%p]: [%c] %m%n

带配置文件的程序举例 :

#include "log4cpp/Category.hh"
#include 
"log4cpp/PropertyConfigurator.hh"
int main(int argc, char* argv[]) {
    
// 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
& sub1 = log4cpp::Category::getInstance(std::string("sub1"));
    log4cpp::Category
& sub2 = log4cpp::Category::getInstance(std::string("sub2"));
    log4cpp::Category
& sub3 = log4cpp::Category::getInstance(std::string("sub3"));
    log4cpp::Category
& sub4 = log4cpp::Category::getInstance(std::string("sub4"));

    
//    正常使用这些category对象进行日志处理。
    root.fatal("root's log");

    
//    sub1 has appender A1 and rootappender. since the additivity property is set true by default
    sub1.info("sub1's log");

    
//    sub2 has appender A2 appender. since the additivity property is set to false
    sub2.alert("sub2's log");

    
//    sub3 only has A3 appender. since the additivity property is set to false
    sub3.debug("sub3's log");
    sub3.alert(
"sub3's log");

    
//    sub4 can not be found in the config file, so the root category's appender and layout are used
    sub4.warn("sub4's log");

    
return 0;
}

终端打印出来的log: 

1308828470 FATAL  : root's log
1308828470 INFO sub1 : sub1's log
The message 'sub2's log' at time 2011-06-23 19:27:50,624 

1308829427 WARN sub4 : sub4's log  

log/A1.log的内容:

INFO    : sub1's log

log/A3.log的内容:

2011-06-23 19:27:50 [ALERT]: [sub3] sub3's log



  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值