【问题标题】:Different files for different levels不同级别的不同文件
【发布时间】:2016-03-04 09:04:23
【问题描述】:

我正在创建一个解析器,我想将 Debug 和 WARN 消息输出到不同的文件。

代码很简单:

 logger(log4cplus::Logger::getInstance(LOG4CPLUS_TEXT("TParser")));
 LOG4CPLUS_WARN/DEBUG(logger, "XYZ");

我尝试使用以下配置文件

log4cplus.logger.TParser=DEBUG, TD

log4cplus.appender.TD=log4cplus::RollingFileAppender
log4cplus.appender.TD.MaxFileSize=5MB
log4cplus.appender.TD.MaxBackupIndex=5
log4cplus.appender.TD.layout=log4cplus::TTCCLayout
log4cplus.appender.TD.File=debug.log

log4cplus.logger.TParser=WARN, TW
log4cplus.appender.TW=log4cplus::RollingFileAppender
log4cplus.appender.TW.MaxFileSize=5MB
log4cplus.appender.TW.MaxBackupIndex=5
log4cplus.appender.TW.layout=log4cplus::TTCCLayout
log4cplus.appender.TW.File=trace.log

但调试不是 bei logger(log4cplus::Logger::getInstance(LOG4CPLUS_TEXT("TksParser")))ng 生成...如果我删除 [ log4cplus.logger.TParser=WARN, TW ] 和行之后它会生成调试。

我也不想将数据输出到控制台。学习使用有点困难,但是关于log4cplus的内容不多

【问题讨论】:

    标签: c++ logging log4cplus


    【解决方案1】:

    您的属性文件的一个问题是您有两行将值设置为log4cplus.logger.TParser。设置此属性的行被设置此属性的第二行覆盖。

    至于单独的日志级别的单独文件,这是可能的,但您通常不会这样做。首先,要意识到除了 DEBUG 和 WARN 之外还有更多的日志级别,例如 INFO、ERROR、FATAL、TRACE。那些会去哪里?

    您可以使用过滤器将不同的日志级别记录到不同的文件。如果您真的只想将 DEBUG 日志级别(而不是 DEBUG 和 TRACE 日志级别)输出到文件中,请使用 LogLevelMatchFilter(或 LogLevelRangeFilter,如果您想要一系列日志级别)来设置一个仅记录 DEBUG 日志级别事件。然后使用与 WARN 日志级别匹配的过滤器设置另一个附加程序,并将其附加到同一个记录器。在你的情况下,你会使用这个:

    log4cplus.logger.TParser=DEBUG, TD, TW
    

    为避免来自一个记录器的日志到达根记录器,请禁用可加性:

    log4cplus.additivity.TParser=false
    

    使用此行,将到达 TParser 记录器的事件将不会进一步传播到根记录器。

    【讨论】:

      猜你喜欢
      • 2016-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-23
      • 2017-02-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多