2014-10-02 34 views
2

내 데스크톱 응용 프로그램에 Java 8의 새로운 기능을 구현 중이며 Hibernate 3.6이이를 좋아하지 않는 것 같습니다.log4j에서 특정 예외를 필터링하는 방법

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 

인터페이스가 인터페이스의 각 기본 방법에 대해 곱 구현하는 각 클래스 : 다음은 던지는 최대 절전 모드 이후

나는, 인터페이스는 "기본 방법"에 추가됩니다. 이 로그는 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 주석 처리를 제거하면 더 이상 로그가 표시되지 않습니다.

답변

0

솔루션 (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> 
3

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/

관련 문제