更改log4j2日志条目的级别

时间:2019-07-10 09:07:00

标签: log4j2

有一个库类(org.hibernate.util.JDBCExceptionReporter)在ERROR级别记录错误。该消息有时是无关紧要的,因为我们可以捕获并更正异常。此外,我们希望消除它们,以便在票证系统或错误报告中不创建不必要的条目。在其他情况下,该消息可能是相关的。最好的解决方案应该是是否可以将日志条目的级别更改为WARN。

log4j2中是否可以根据记录器名称更改条目的级别,或者换句话说,将给定记录器的error()调用转换为warn()调用。

1 个答案:

答案 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。