log4j 1.2 使用 ExpressionFilter 过滤异常
log4j 1.2 filter exception with ExpressionFilter
我正在使用 log4j1.2.17,我想从我的日志中过滤一些异常,在尝试了很多工作人员之后,我没有得到我期望的结果。这是我要过滤的异常,通常不会显示在日志控制台中:
2020-02-26 11:04:50,470 ERROR [worker #1] com.myPackage.myClass: Access denied
com.myPackage.myClass.model.RestException: Access denied
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
这是我的 log4j.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="file" class="org.apache.log4j.RollingFileAppender">
<param name="file" value="log/myProject.log"/>
<param name="filePattern" value="/var/log/tomcat7/ideal-%i.log"/>
<param name="MaxFileSize" value="10MB"/>
<param name="MaxBackupIndex" value="9"/>
<param name="Append" value="true"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{ISO8601} %-5p [%t] %c: %m%n"/>
</layout>
<!-- Exclude expected exceptions -->
<filter class="org.apache.log4j.filter.ExpressionFilter">
<param name="Expression" value="EXCEPTION ~= ' Access denied'"/>
<param name="AcceptOnMatch" value="false"/>
</filter>
</appender>
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{ISO8601} %-5p [%t] %c: %m%n"/>
</layout>
<!-- Exclude expected exceptions -->
<filter class="org.apache.log4j.filter.ExpressionFilter">
<param name="Expression" value="EXCEPTION ~= ' Access denied'"/>
<param name="AcceptOnMatch" value="false"/>
</filter>
</appender>
<root>
<priority value="DEBUG" />
<___priority value="INFO" />
<appender-ref ref="file"/>
<appender-ref ref="console"/>
</root>
</log4j:configuration>
我也试过了
<param name="Expression" value="EXCEPTION ~= 'com.myPackage.myClass: Access denied'"/>
<param name="Expression" value="EXCEPTION ~= 'com.myPackage.myClass.model.RestException: Access denied'"/>
但我的日志中仍有 'Access denied' 异常
经过更多研究后,我更改了 class 过滤器
来自:"org.apache.log4j.filter.ExpressionFilter"
至:"org.apache.log4j.varia.StringMatchFilter"
它工作得很好,现在它从我的日志中隐藏了那个异常
<filter class="org.apache.log4j.varia.StringMatchFilter">
<param name="StringToMatch" value="Access denied"/>
<param name="AcceptOnMatch" value="false"/>
</filter>
我正在使用 log4j1.2.17,我想从我的日志中过滤一些异常,在尝试了很多工作人员之后,我没有得到我期望的结果。这是我要过滤的异常,通常不会显示在日志控制台中:
2020-02-26 11:04:50,470 ERROR [worker #1] com.myPackage.myClass: Access denied
com.myPackage.myClass.model.RestException: Access denied
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
这是我的 log4j.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="file" class="org.apache.log4j.RollingFileAppender">
<param name="file" value="log/myProject.log"/>
<param name="filePattern" value="/var/log/tomcat7/ideal-%i.log"/>
<param name="MaxFileSize" value="10MB"/>
<param name="MaxBackupIndex" value="9"/>
<param name="Append" value="true"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{ISO8601} %-5p [%t] %c: %m%n"/>
</layout>
<!-- Exclude expected exceptions -->
<filter class="org.apache.log4j.filter.ExpressionFilter">
<param name="Expression" value="EXCEPTION ~= ' Access denied'"/>
<param name="AcceptOnMatch" value="false"/>
</filter>
</appender>
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{ISO8601} %-5p [%t] %c: %m%n"/>
</layout>
<!-- Exclude expected exceptions -->
<filter class="org.apache.log4j.filter.ExpressionFilter">
<param name="Expression" value="EXCEPTION ~= ' Access denied'"/>
<param name="AcceptOnMatch" value="false"/>
</filter>
</appender>
<root>
<priority value="DEBUG" />
<___priority value="INFO" />
<appender-ref ref="file"/>
<appender-ref ref="console"/>
</root>
</log4j:configuration>
我也试过了
<param name="Expression" value="EXCEPTION ~= 'com.myPackage.myClass: Access denied'"/>
<param name="Expression" value="EXCEPTION ~= 'com.myPackage.myClass.model.RestException: Access denied'"/>
但我的日志中仍有 'Access denied' 异常
经过更多研究后,我更改了 class 过滤器 来自:"org.apache.log4j.filter.ExpressionFilter" 至:"org.apache.log4j.varia.StringMatchFilter" 它工作得很好,现在它从我的日志中隐藏了那个异常
<filter class="org.apache.log4j.varia.StringMatchFilter">
<param name="StringToMatch" value="Access denied"/>
<param name="AcceptOnMatch" value="false"/>
</filter>