有一个库类(org.hibernate.util.JDBCExceptionReporter)在ERROR级别记录错误。该消息有时是无关紧要的,因为我们可以捕获并更正异常。此外,我们希望消除它们,以便在票证系统或错误报告中不创建不必要的条目。在其他情况下,该消息可能是相关的。最好的解决方案应该是是否可以将日志条目的级别更改为WARN。
log4j2中是否可以根据记录器名称更改条目的级别,或者换句话说,将给定记录器的error()调用转换为warn()调用。
答案 0 :(得分:0)
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。