Log4j2在apender中过滤特定级别

我应该使用什么filter来定义用apender记录的特定级别? 例如:

Java的:

LOGGER.debug("Debug message"); LOGGER.info("Info message"); LOGGER.warn("Warn message"); LOGGER.error("Error message"); LOGGER.fatal("Fatal message"); 

log4j2.xml:

                      

文件输出很好,但在控制台我有这样的结果:

 [application.Main] [INFO] Info message [application.Main] Info message [application.Main] [WARN] Warn message [application.Main] Warn message [application.Main] [ERROR] Error message [application.Main] Error message [application.Main] [FATAL] Fatal message [application.Main] Fatal message 

但我需要info-stdout-message appender只输出INFO消息,而detail detailed-stdout-message输出所有EXEPT INFO。 所以控制台输出应该如下所示:

 [application.Main] Info message [application.Main] [WARN] Warn message [application.Main] [ERROR] Error message [application.Main] [FATAL] Fatal message 

无法找出如何防止filter尊重级别inheritance。 是否有可能做到这一点?

我不是百分百肯定它会起作用,但尝试一下:

            

这里有两个控制台appender。 一个将所有跟踪,调试和信息级别记录到std_out,另一个将所有警告,错误和致命级别记录到std_err。 这非常有用,例如在eclipse中,因为std_err显示为红色。

             

我花了很长时间才弄清楚如何通过log4j2.xml配置文件过滤一系列LogLevels。 在最后,这对我有用:

     

在这种情况下,Log4J将记录从Level.TRACE到Level.DEBUG的所有消息,Level.DEBUG以下的所有级别都将被忽略。

请检查https://logging.apache.org/log4j/2.0/manual/filters.html上的所有log4j2过滤可能性

示例配置片段

 ...   [%d][%p][%c:%L:%M] - %m%n      ... 

实际上,从您的问题来看,您似乎不想要两个不同的appender,而是在不同情况下使用的两种不同模式。 为此你应该使用PatternSelector。