log4cplus - 如何配置记录器子级别以依赖其父级

时间:2012-12-29 21:17:04

标签: logging log4j log4cplus

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

从属性文件中,是否可以使记录器级别依赖于其父级,如下所示:

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

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

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

我的属性文件 - 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()。提前谢谢!

1 个答案:

答案 0 :(得分:0)

尝试更改此行

log4cplus.logger.cpuLoad.child=FATAL, FILEAPPENDER

进入这个

log4cplus.logger.cpuLoad.child=INHERITED, FILEAPPENDER

这应该可以解决问题。

修改

@jaguzu:我不太了解log4j,但在我看来,你想要实现的是在log4j和log4cplus都使用的模型之外:要么你明确地设置你的日志级别,要么你从父级继承它记录仪。您可以使用记录器阈值和appender过滤器实现更多过滤,但这两者都不会从父记录器AFAIK继承。