如何从log4j中过滤特定的异常

时间:2014-10-02 17:32:41

标签: java hibernate filter log4j java-8

我正在我的桌面应用程序上实现Java 8的一些新功能,而Hibernate 3.6似乎不喜欢它。

我在接口中添加了一个“默认方法”,从那时起它就抛出了Hibernate:

2014-10-02 14:01:25,538 WARN entity.PojoEntityTuplizer  - could not create proxy factory for:modelo.ChequeTercero
org.hibernate.HibernateException: Javassist Enhancement failed: modelo.ChequeTercero
at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.getProxyFactory(JavassistLazyInitializer.java:169)
at org.hibernate.proxy.pojo.javassist.JavassistProxyFactory.postInstantiate(JavassistProxyFactory.java:65)
Caused by: java.lang.VerifyError: (class: modelo/ChequeTercero_$$_javassist_45, method: _d21getNumeroValor signature: ()Ljava/lang/String;) Illegal use of nonvirtual function call

对于实现接口的EACH类,在接口中为EACH默认方法相乘。 由于此日志是Level.WARN,因此每次打开应用程序时都会在用户上生成biiiiiiiii日志文件。

我尝试制作一些记录器过滤器但是没有工作

<filter class="org.hibernate.proxy.pojo.BasicLazyInitializer">
<param name="LevelMin" value="FATAL" />
<param name="LevelMax" value="FATAL" />
    </filter>
<filter class="org.apache.log4j.filter.ExpressionFilter">
        <param name="expression" value="EXCEPTION ~= org.hibernate.proxy.pojo.BasicLazyInitializer"/>
        <param name="acceptOnMatch" value="false"/>
    </filter>
    <filter class="org.apache.log4j.varia.StringMatchFilter">
        <param name="StringToMatch" value="org.hibernate.HibernateException: Javassist Enhancement failed"/>
        <param name="AcceptOnMatch" value="false" />
    </filter>
    <!--<filter class="org.apache.log4j.varia.DenyAllFilter"/> -->

我做错了什么?如果我取消注释DenyAllFilter,则不再出现日志

2 个答案:

答案 0 :(得分:5)

使用log4j 1.2我可以使用Appender中的ExceptionFilter过滤掉特定的异常。

<appender name="LOGFILE" class="com.me.RollingFileAppender">
    <param name="File" value="..." />
    ...
    <layout .../>
    <!-- Exclude expected exceptions -->
    <filter class="org.apache.log4j.filter.ExpressionFilter">
        <param name="Expression" value="EXCEPTION ~= 'String found in the exception message'"/>
        <param name="AcceptOnMatch" value="false"/>
    </filter>
</appender>

请参阅http://blog.trifork.com/2011/08/23/filtering-specific-exceptions-when-using-log4j/

答案 1 :(得分:3)

解决方案(适用于log4j 2.x),从日志文件控制台中排除。 RegexFilter 标记

<Appenders>
        <Console name="console" target="System.out">
            <RegexFilter regex=".*(Javassist Enhancement failed|could not create proxy factory for).*" onMatch="DENY" onMismatch="ACCEPT"/>
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-2p %c{1.} %x - %m%n"/> 
        </Console>
        <File name="logfile" filename="./app.log" append="true">
            <!--Evita cargar en el log el error que tira hibernate por Java 8 (default method en Interfaces)-->
            <RegexFilter regex=".*(Javassist Enhancement failed|could not create proxy factory for).*" onMatch="DENY" onMismatch="ACCEPT"/>
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c{-1} %X{userName} - %m%n"/> 
        </File>
    </Appenders>