我应该使用什么过滤器来定义要用apender记录的特定级别?例如:
java :
LOGGER.debug("Debug message");
LOGGER.info("Info message");
LOGGER.warn("Warn message");
LOGGER.error("Error message");
LOGGER.fatal("Fatal message");
log4j2.xml:
<Configuration>
<Appenders>
<Console name="info-stdout-message">
<PatternLayout pattern="[%logger{36}] %message %n" />
<ThresholdFilter level="info"/>
</Console>
<Console name="detailed-stdout-message">
<PatternLayout pattern="[%logger{36}] [%level] %message %n" />
</Console>
<File name="file-appender" fileName="logs/debug.log">
<PatternLayout pattern="%d{HH:mm:ss dd.mm} [%t] [%-5level] %logger{36} - %msg %n" />
</File>
</Appenders>
<Loggers>
<Root level="debug">
<AppenderRef ref="file-appender" level="debug" />
<AppenderRef ref="info-stdout-message" level="info"/>
<AppenderRef ref="detailed-stdout-message" level="info"/>
</Root>
</Loggers>
</Configuration>
文件输出是好的,但在控制台我有这样的结果:
[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消息,而detailed-stdout-message
输出所有EXEPT INFO。
[application.Main] Info message
[application.Main] [WARN] Warn message
[application.Main] [ERROR] Error message
[application.Main] [FATAL] Fatal message
找不到如何防止筛选器的相关级别继承。是否可以执行此操作?
7条答案
按热度按时间9ceoxa921#
这里有两个控制台附加器。一个将所有跟踪、调试和信息级别记录到std_out,另一个将所有警告、错误和致命级别记录到std_err。这在eclipse中非常有用,因为std_err显示为红色。
rqenqsqc2#
这是可行的:
deyfvvtc3#
我花了很长时间才弄明白如何通过log4j2.xml配置文件过滤一系列LogLevel。最后,这对我很有效:
在这种情况下,Log4J将记录从Level.TRACE到Level.DEBUG的所有消息,Level.DEBUG以下的所有级别都将被忽略。
c2e8gylq4#
请检查https://logging.apache.org/log4j/2.0/manual/filters.html处的所有log4j2过滤可能性
示例配置片段
8wigbo565#
实际上,从你的问题来看,你并不需要两个不同的appender,而是需要两个在不同环境下使用的不同模式,为此你应该使用PatternSelector。
gj3fmq9x6#
这里的代码为我工作。我只忽略了docxj4中的警告日志。检查下面的代码。提前感谢。
zvms9eto7#
虽然所有这些变通方案在2014年都是必要的,但当问题发布时:
LevelRangeFilter
(参见LOG4J2-1106),它允许写入:仅选择
INFO
消息或:选择一个范围(从最高到最低的具体水平)。
LevelMatchFilter
,进一步简化了配置: