[英]Log4j logging info messages without logging warn messages
我试图将某些信息消息记录到文件中,但是一旦运行该应用程序,就会同时记录警告和信息消息。 现在,根据我从本站点所读到的内容,您不能登录一个而不登录另一个。 有人曾尝试过这个吗? 如果是这样,您的属性文件的外观如何?
我的属性文件如下所示:
***** Set root logger level to INFO and its two appenders to stdout and R.
log4j.rootLogger=INFO, stdout, R
# ***** stdout is set to be a ConsoleAppender.
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
# ***** stdout uses PatternLayout.
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
# ***** Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%M has started] (%F:%L) - %m%n
/
# ***** R is set to be a RollingFileAppender.
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.DatePattern='.'yyyy-MM-dd-HH
log4j.appender.R.File="folder where log will be saved"
log4j.appender.R.layout.ConversionPattern=%5p [%m has started] %c{2}.[%x] (%F:%L) %d{yyyy-MM-dd HH:mm:ss} - %m%n
# ***** R uses PatternLayout.
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%5p [%m has started] %c{2}.[%x] (%F:%L) %d{yyyy-MM-dd HH:mm:ss} - %m%n
AFAIK没有任何标准方法可以抑制比您感兴趣的日志级别更高的日志级别。
但是,您可能可以使用自定义附加程序执行此操作。
它可能看起来类似于:
public class MyAppender extends AppenderSkeleton {
protected void append(LoggingEvent event) {
if( event.getLevel() == Level.INFO ) {
//append here, maybe call a nested appender
}
}
}
日志级别WARN高于INFO ,并且日志记录配置定义了附加程序要记录的最小阈值级别。 因此,所有高于该级别的消息也将被记录。
因此,期望WARN消息。 而且我认为您无法将其配置为所需的方式。
如果不应该打印的WARN消息与INFO消息来自不同的软件包,则可以为这些软件包定义不同的日志级别。 第一个可以指定错误级别,第二个可以指定级别
它应该看起来像这样:log4j.logger.com.test.something = ERROR log4j.logger.com.other.package = INFO
干杯
为什么要过滤WARN级别? 正如peshkira所说,您可以使用两个不同的记录器来拆分/过滤日志输出,或者可以使用grep
工具进行过滤(脱机),或者如果您仍然不需要它们,则可以从代码中删除WARN日志。
据我了解,像LevelMatchFilter和LevelRangeFilter这样的高级过滤器可以为您解决问题。
但是需要记住的是,使用这些可能需要xml配置而不是属性: 无法为log4j设置LevelRangeFilter
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.