【问题标题】:log4cplus - how to configure logger child level to depend on its parentlog4cplus - 如何将记录器子级别配置为依赖于其父级
【发布时间】:2012-12-29 21:17:03
【问题描述】:

嘿,我正在尝试 log4cplus(类似于 log4j,因此我的标签)库。

从属性文件中,是否可以像这样使记录器级别依赖于其父级:

  • 如果 parent=INFO & child=WARN ,孩子应该记录消息 >= "WARN"
  • 如果 parent=OFF & child=WARN ,孩子不应该记录任何消息。
  • 如果 parent.parent=ALL & parent=WARN & child=INFO,孩子应该记录消息 >=WARN
  • 如果 parent.parent=OFF & parent=ALL & child=WARN ,没有人应该记录 消息导致 parent.parent。

使用下面的代码,结果如下(并且错误!)

  • parent=WARN & child=FATAL ,孩子正在记录 WARN 消息
  • parent=OFF & child=WARN ,孩子正在记录消息。

我的属性文件 - log.properties:

    log4cplus.logger.cpuLoad=WARN, FILEAPPENDER
    log4cplus.logger.cpuLoad.child=FATAL, FILEAPPENDER
    log4cplus.additivity.cpuLoad.child=false

    log4cplus.appender.FILEAPPENDER=log4cplus::RollingFileAppender
    log4cplus.appender.FILEAPPENDER.File=./cpuLoad.log
    log4cplus.appender.FILEAPPENDER.MaxFileSize=1MB
    log4cplus.appender.FILEAPPENDER.layout=log4cplus::PatternLayout
    log4cplus.appender.FILEAPPENDER.layout.ConversionPattern=%d{%m/%d/%y %H:%M:%S} %-5p %c{2} – %m%n

我的 c++ 代码 - main.cpp:

    Logger loggerCpu = Logger::getInstance("cpuLoad");
    Logger loggerCpuChild = Logger::getInstance("cpuLoad.child");

    LOG4CPLUS_WARN(loggerCpu, "hello from loggerCpu");
    LOG4CPLUS_WARN(loggerCpuChild, "hello from loggerCpuChild" );

我希望它可以从 log4cplus 库本身工作,并且主要来自属性文件。我还需要这个父/子关系,所以我可以使用 getParent()。提前致谢!

【问题讨论】:

    标签: logging log4j log4cplus


    【解决方案1】:

    尝试改变这一行

    log4cplus.logger.cpuLoad.child=FATAL, FILEAPPENDER
    

    进入这个

    log4cplus.logger.cpuLoad.child=INHERITED, FILEAPPENDER
    

    这应该可以解决问题。

    编辑:

    @jaguzu:我不太了解 log4j,但在我看来,您要实现的目标超出了 log4j 和 log4cplus 使用的模型:要么明确设置日志级别,要么从父级继承记录器。您可以使用记录器阈值和附加过滤器实现更多过滤,但两者都不是从父记录器 AFAIK 继承的。

    【讨论】:

    • 谢谢,但它不满足要求 如果 parent=INFO & child=WARN ,孩子应该记录消息 >= "WARN
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多