不同级别的不同文件

时间:2015-11-30 16:39:25

标签: c++ logging log4cplus

我正在创建一个解析器,我想将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

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

我也不想将数据输出到控制台。我在学习如何使用方面遇到了一些困难,但关于log4cplus的内容并不多

1 个答案:

答案 0 :(得分:1)

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

对于单独日志级别的单独文件,嗯,这是可能的,但它不是你通常做的事情。首先,要意识到还有更多的日志级别,而不仅仅是DEBUG和WARN,如INFO,ERROR,FATAL,TRACE。那些人会去哪儿?

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

log4cplus.logger.TParser=DEBUG, TD, TW

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

log4cplus.additivity.TParser=false

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