更改 log4j2 日志条目的级别
Change the level of a log4j2 log entry
有一个库 class (org.hibernate.util.JDBCExceptionReporter) 在 ERROR 级别记录错误。该消息有时是无关紧要的,因为我们捕获并纠正了异常。此外,我们希望消除它们,以便在工单系统或错误报告中不创建不必要的条目。在其他情况下,消息可能是相关的。最好的解决方案应该是我们可以将日志条目的级别更改为 WARN。
log4j2 中是否有任何方法可以根据记录器名称更改条目的级别,或者换句话说,将给定记录器的 error() 调用转换为 warn() 调用。
ScriptPatternSelector 是这个问题的一个可能的解决方案。使用此构造,我们可以根据几个方面使用不同的模式。在我们的例子中,我们可以根据记录器名称来区分:
<appenders>
<RollingFile name="FILE" fileName="..."
filePattern="...">
<PatternLayout>
<ScriptPatternSelector defaultPattern="%d %-5p [%t] %c{1} - %m%n">
<Script name="Log4jPatternSelector" language="bsh"><![CDATA[
if (logEvent.getLevel() == org.apache.logging.log4j.Level.ERROR
&& logEvent.getLoggerName().endsWith("JDBCExceptionReporter")) {
return "error_to_warn";
} else {
return null;
}]]>
</Script>
<PatternMatch key="error_to_warn" pattern="%d WARN [%t] %c{1} - %m%n"/>
</ScriptPatternSelector>
</PatternLayout>
</RollingFile>
...
</appenders>
也就是说,在JDBCExceptionReporter的报错信息模式中,我们使用了常量WARN,而不是原来的优先级ERROR。
有一个库 class (org.hibernate.util.JDBCExceptionReporter) 在 ERROR 级别记录错误。该消息有时是无关紧要的,因为我们捕获并纠正了异常。此外,我们希望消除它们,以便在工单系统或错误报告中不创建不必要的条目。在其他情况下,消息可能是相关的。最好的解决方案应该是我们可以将日志条目的级别更改为 WARN。
log4j2 中是否有任何方法可以根据记录器名称更改条目的级别,或者换句话说,将给定记录器的 error() 调用转换为 warn() 调用。
ScriptPatternSelector 是这个问题的一个可能的解决方案。使用此构造,我们可以根据几个方面使用不同的模式。在我们的例子中,我们可以根据记录器名称来区分:
<appenders>
<RollingFile name="FILE" fileName="..."
filePattern="...">
<PatternLayout>
<ScriptPatternSelector defaultPattern="%d %-5p [%t] %c{1} - %m%n">
<Script name="Log4jPatternSelector" language="bsh"><![CDATA[
if (logEvent.getLevel() == org.apache.logging.log4j.Level.ERROR
&& logEvent.getLoggerName().endsWith("JDBCExceptionReporter")) {
return "error_to_warn";
} else {
return null;
}]]>
</Script>
<PatternMatch key="error_to_warn" pattern="%d WARN [%t] %c{1} - %m%n"/>
</ScriptPatternSelector>
</PatternLayout>
</RollingFile>
...
</appenders>
也就是说,在JDBCExceptionReporter的报错信息模式中,我们使用了常量WARN,而不是原来的优先级ERROR。