java - 如何从 Log4j 中过滤特定的异常?

标签 java hibernate filter log4j java-8

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

我在接口(interface)中添加了一个“默认方法”,从那时起它就在 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

实现接口(interface)的每个类乘以接口(interface)中的每个默认方法。

因为这个日志是一个 Level.WARN,所以它会在用户每次打开应用程序时生成 biiiiiiiiiig 日志文件。

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

<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,则不再显示任何日志。

最佳答案

我找到了解决方案 - RegexFilter .

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

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

关于java - 如何从 Log4j 中过滤特定的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26166281/

相关文章:

java - 如何在选择文件时扩展/收缩 JTextField

java - 在 Java 中使用 ImageIO 设置 jpg 压缩级别

c - 这个过滤器实现是否产生正确的输出?

python - 如何有效分离不同大小的数据输入?

java - 如何使用应用程序配置注册 Ratpack 的 ConfigurableModule

java - Hibernate 中 load() 与 get() 的优势是什么?

java - Hibernate 可以对不同于字段名称的实体属性使用逻辑名称吗?

hibernate - GGTS中使用grails的警告

mysql - 即使生成 csv,实体管理器也会抛出 "ResultSet is from update. No data"

arrays - 使用过滤器和排序在一起的 Google 表格