Log4j记录信息消息而不记录警告消息

时间:2011-09-23 08:58:47

标签: java logging log4j

我正在尝试将某些信息消息记录到文件中,但是一旦我运行该应用程序,就会记录警告和信息消息。现在,根据我从this site读到的内容,您无法在不记录另一个的情况下记录一个。有人曾尝试过这个吗?如果是这样,你的属性文件是怎么样的?

我的属性文件如下所示:

 ***** 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

5 个答案:

答案 0 :(得分:2)

AFAIK没有标准的方法可以抑制比您感兴趣的更高的日志级别。

但是,您可以使用自定义appender来执行此操作。

它看起来可能类似于:

public class MyAppender extends AppenderSkeleton {
  protected void append(LoggingEvent event) {
    if( event.getLevel() == Level.INFO ) {
      //append here, maybe call a nested appender
    }
  }
}

答案 1 :(得分:1)

日志级别 WARN 高于 INFO ,日志记录配置定义了appender要记录的最小阈值级别。因此,所有高于该级别的消息也将被记录。

因此,预期会发出WARN消息。我认为你不能按照你想要的方式配置它。

答案 2 :(得分:0)

如果不打印的WARN消息来自与INFO消息不同的包,则可以为这些包定义不同的日志级别。第一个可以指定级别ERROR和第二个INFO

它看起来应该是这样的: log4j.logger.com.test.something = ERROR log4j.logger.com.other.package = INFO

欢呼声

答案 3 :(得分:0)

为什么要过滤WARN级别?正如peshkira所说,您可以使用两个不同的记录器来分割/过滤日志输出,或者您可以使用grep之类的工具进行过滤(离线),或者您可以简单地从代码中删除WARN日志无论如何都需要它们。

答案 4 :(得分:0)

据我所知,LevelMatchFilterLevelRangeFilter等高级过滤器可以为您提供帮助。

值得记住的是,使用这些可能需要xml配置而不是属性:Can't set LevelRangeFilter for log4j