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

Java Log4j记录信息消息而不记录警告消息,java,logging,log4j,Java,Logging,Log4j,我正在尝试将某些信息消息记录到文件中,但一旦我运行应用程序,就会记录警告和信息消息。现在,从我读到的,你不能在不记录另一个的情况下记录一个。以前有人试过这个吗?如果是,您的属性文件是什么样子的 我的属性文件如下所示: ***** 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 C

我正在尝试将某些信息消息记录到文件中,但一旦我运行应用程序,就会记录警告和信息消息。现在,从我读到的,你不能在不记录另一个的情况下记录一个。以前有人试过这个吗?如果是,您的属性文件是什么样子的

我的属性文件如下所示:

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

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

但是,您可能可以使用自定义的appender来实现这一点

它可能看起来与此类似:

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

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


因此,需要警告消息。我不认为您可以按照您想要的方式配置它。

如果不应该打印的警告消息来自与信息消息不同的包,那么您可以为这些包定义不同的日志级别。第一个可以指定级别错误,第二个可以指定信息

它应该是这样的: log4j.logger.com.test.something=错误 log4j.logger.com.other.package=INFO


干杯

为什么要过滤警告级别?正如peshkira所说,您可以使用两个不同的记录器来分割/过滤日志输出,或者您可以使用
grep
之类的工具进行过滤(脱机),或者如果您根本不需要警告日志,您也可以从代码中删除警告日志。

据我所知,像and这样的高级过滤器可以为您提供帮助


但值得记住的是,使用这些可能需要xml配置而不是属性:

您有任何示例appender可以做到这一点吗?@user960740他刚刚给了您一个。就这些。只有您可以扩展您选择的appender,如DailRollingFileAppender或您使用的ConsoleAppender。显然,两者都来自同一个包事实上,两者都出现在同一个类中。我需要警告日志仅用于调试目的,也就是说,我将级别设置为“警告”,但不希望在正常运行时记录这些消息,那么您为什么不对这些消息使用调试级别,并将运行时级别设置为“调试”以进行调试,将其设置为“正常”运行时的信息?然后,您对我可以通过配置来解决此难题有何建议,但是上面的自定义appender应该可以帮助您。