更改 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。