Log4cxx中多用户的解决方法之一

上一篇中说到多用户时的一点小问题,(可以在这里查看http://blog.csdn.net/spirit_only/archive/2008/01/11/2036790.aspx),经过研究可以通过下面的方法解决。

  1. 下载Log4cxx的源码,我下的是0.9.7,不知道是什么原因开发人员竟然在这个版本中将threshold这个重要的属性忽略了。通过该属性的设置,用户可以过滤掉threshold对应的level以下的信息。打开msvc目录中的工程,找到fileappender.ccp文件,在setOption()函数中添加下面的代码:

        else if (StringHelper::equalsIgnoreCase(option, _T("threshold")))
        {
            setThreshold(OptionConverter::toLevel(value, Level::ALL));
        }

    注意这里的threshold属性,这将是我们配置多用户的关键地方。设置好后重新编译,OK,等待编译好dll和lib,并将它们添加到自己的工程中。

  2. 还是上次的那个properties文件

    [ code ]
    # 设置root logger为DEBUG级别,使用了ca
    , fa , err三个Appender
    log4j.rootLogger
    = DEBUG , ca , fa , err
    #设置spirit为ERROR级别,继承rootLogger的Appender
    log4j.spirit
    = ERROR

    #对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

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

  3. 测试程序如下:

    #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/log4cxx.properties");

        PropertyConfigurator::configure(Property);

        LoggerPtr traceLogger 
    = Logger::getLogger(trace);
        LoggerPtr parent 
    = traceLogger->getParent();

        traceLogger
    ->error(_T("How to use?"));
        traceLogger
    ->debug(_T("I am in debug"));
    }

    OK,编译并执行我们的代码,然后打开文件error.log和debug.log可以看到:
    error.log
    2008-01-11 14:41:47,750 [2244] ERROR spirit  - How to use?
    debug.log
    2008-01-11 14:41:47,750 [2244] ERROR spirit  - How to use?
    2008-01-11 14:41:47,750 [2244] DEBUG spirit  - I am in debug

总结:通过上面的方法,我们就可以创建多个用户,将不同级别的信息定向到特定的地方,方便我们使用。

补充:1.  Log4cxx0.9.7中预定义的Level及其级别为:ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF并不像官方手册中写道的包括了TRACE,这个在0.10.0中新加的。

          2.   Log4cxx0.9.7和Log4cxx0.10.0中有关函数和定义区别还是比较大的,使用时根据情况进行修改。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值