ovn*_*nia 9 java logging log4j log4j2
我应该使用什么过滤器来定义要使用apender记录的特定级别?例如:
Java的:
LOGGER.debug("Debug message");
LOGGER.info("Info message");
LOGGER.warn("Warn message");
LOGGER.error("Error message");
LOGGER.fatal("Fatal message");
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
文件输出很好,但在控制台我有这样的结果:
[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
Run Code Online (Sandbox Code Playgroud)
但我需要info-stdout-messageappender只输出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
Run Code Online (Sandbox Code Playgroud)
无法找出如何防止过滤器尊重级别继承.是否有可能做到这一点?
Her*_*eri 17
这里有两个控制台appender.一个将所有跟踪,调试和信息级别记录到std_out,另一个将所有警告,错误和致命级别记录到std_err.这非常有用,例如在eclipse中,因为std_err显示为红色.
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} (%6r) %-5p [%-7t] %F:%L %x - %m%n" />
<Filters>
<ThresholdFilter level="warn" onMatch="DENY" onMismatch="ACCEPT" />
</Filters>
</Console>
<Console name="STDERR" target="SYSTEM_ERR">
<PatternLayout pattern="%d{HH:mm:ss.SSS} (%6r) %-5p [%-7t] %F:%L %x - %m%n" />
<Filters>
<ThresholdFilter level="WARN" onMatch="ACCEPT" />
</Filters>
</Console>
Run Code Online (Sandbox Code Playgroud)
Rem*_*pma 14
这有效:
<Console name="info-stdout-message">
<PatternLayout pattern="[%logger{36}] %message %n" />
<Filters>
<!-- Now deny warn, error and fatal messages -->
<ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL"/>
<!-- This filter accepts info, warn, error, fatal and denies debug/trace -->
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
</Console>
Run Code Online (Sandbox Code Playgroud)
我花了很长时间才弄清楚如何通过 log4j2.xml 配置文件过滤一系列日志级别。
最后这对我有用:
<Filters>
<ThresholdFilter level="trace" />
<ThresholdFilter level="info" onMatch="DENY" onMismatch="NEUTRAL" />
</Filters>
Run Code Online (Sandbox Code Playgroud)
在这种情况下,Log4J 将记录从 Level.TRACE 到 Level.DEBUG 的所有消息,低于 Level.DEBUG 的所有级别都将被忽略。