1

嘿,我正在尝试 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()。提前致谢!

4

1 回答 1

0

尝试更改此行

log4cplus.logger.cpuLoad.child=FATAL, FILEAPPENDER

进入这个

log4cplus.logger.cpuLoad.child=INHERITED, FILEAPPENDER

这应该够了吧。

编辑:

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

于 2012-12-30T17:47:48.157 回答