我正在我的桌面应用程序上实现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
,因此每次用户打开应用程序时都会生成billiiiiiig日志文件。
我试着做一些日志过滤器,但不工作:
<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
,则不再显示日志。
3条答案
按热度按时间hi3rlvi21#
我已经找到了解决方案-
RegexFilter
。下面是相关的Log4j 2.x配置,它允许我从 log file 和 console appender中排除特定的消息。
epfja78i2#
使用log4j 1.2,我能够过滤掉特定的异常,在过滤器中使用ExpressionFilter。
参见http://blog.trifork.com/2011/08/23/filtering-specific-exceptions-when-using-log4j/
lmvvr0a83#
对于YAML,请参阅/阅读以下内容:
公认的答案是使用RegexFilter,这是在Log4j 2中管理日志过滤的一个优雅的解决方案。
在实现时,遇到了一个场景,需要从日志中排除特定的
Hibernate
错误。在我们的项目中,我们使用的是YAML
配置,因此发现在这里分享这种方法很有价值,特别是因为互联网上大多数可用的示例都倾向于关注XML
配置。下面是如何在
YAML
Log4j2
配置中使用RegexFilter
的示例:在上面的示例中,目的是过滤掉与
org.hibernate.StaleStateException
相关的日志,防止它们被记录。这是在允许捕获org.hibernate.orm.jdbc.batch
日志记录器中的所有其他error
日志的同时实现的。您可以根据自己的喜好进行进一步的定制。