如何从Log4j过滤特定的异常? [英] How to filter a specific exception from Log4j?

查看:397
本文介绍了如何从Log4j过滤特定的异常?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm implementing some new features of Java 8 on my desktop app and Hibernate 3.6 seems to doesn't like it.

我向接口添加了一个默认方法",此后便将其休眠:

I added to an Interface a "default method", since then Hibernate it throwing:

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默认方法.

for EACH class that implement the interface multiplied for EACH default method in the interface.

由于此日志是Level.WARN,因此每次用户打开应用程序时,它将在用户上生成双向日志文件.

As this log is a Level.WARN, it is generating biiiiiiiiiig log file on the users every time they open the application.

我尝试制作一些记录器过滤器,但不起作用:

I tried to make some logger filters but is not working:

<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,将不再显示日志.

What am I doing wrong? Also if I uncomment DenyAllFilter no log appears anymore.

推荐答案

我找到了解决方案-

I have found the solution - RegexFilter.

这是相关的Log4j 2.x配置,它使我可以从日志文件控制台附加程序中排除特定消息.

Here is the related Log4j 2.x configuration, that allows me to exclude specific messages both from log file and console appenders.

<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>

这篇关于如何从Log4j过滤特定的异常?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆