2011-11-16 11 views

Odpowiedz

2

Napotkałem ten sam problem i znalazłem lepsze rozwiązanie. Przede wszystkim będziesz musiał zacząć od aktualnego log4j.xml. Moje nadal miały takie znaczniki, jak category i priority, które muszą być zastąpione odpowiednio przez logger i level w konfiguracji. Następnie usuń wszystkich konkretnych aplikacji, na przykład: RollingFileAppender. Będziesz musiał je później przekształcić ręcznie.

Następnie wykonaj instrukcje od this blog, aby przekonwertować plik log4j.xml na plik logback.xml przy użyciu Xalan i filtru konwersji XSLT. Ponieważ treść tego bloga jest dość cenna dla mojej odpowiedzi, osobiście upewniłem się, że ten artykuł może na wszelki wypadek być found in the wayback machine. Ponadto artykuł nie podaje wersji wymaganych bibliotek. Oto jeden użyłem:

  • serializer-2.7.1
  • Xalan-2.7.0
  • xercesImpl-2.6.2
  • xml-apis-03.01.02

A oto linia poleceń, która działała dla mnie (wykonana w tym samym folderze, w którym wszystkie biblioteki i zasoby:

java -classpath xalan-2.7.0.jar org.apache.xalan.xslt.Process -IN log4j.xml -XSL log4j-to-logback.xsl -OUT logback.xml 

Teraz większość prac jest już wykonana. Przede wszystkim zreorganizowałem wszystkie rejestratory tak, jakby były w oryginalnym pliku log4j.xml dla łatwiejszego dalszego porównania. Następnie ręcznie konwertowałem specjalnych aplikatorów. Jest to łatwiejsze niż się wydaje, ale jasne jest to, że jest to documentation. Oto przykład (najbardziej skomplikowane miałem do czynienia z faktycznie):

<!-- Log4J Configuration --> 
<appender name="myAppender" class="org.apache.log4j.RollingFileAppender"> 
    <param name="File" value="${catalina.base}/logs/myApp.log" /> 
    <param name="Append" value="true" /> 
    <param name="MaxFileSize" value="20MB" /> 
    <param name="MaxBackupIndex" value="10" /> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%d %X{param} %-5p %m%n" /> 
    </layout> 
     <filter class="org.apache.log4j.varia.StringMatchFilter"> 
       <param name="StringToMatch" value="PATTERN1" /> 
       <param name="AcceptOnMatch" value="true" /> 
     </filter> 
     <filter class="org.apache.log4j.varia.StringMatchFilter"> 
       <param name="StringToMatch" value="PATTERN2" /> 
       <param name="AcceptOnMatch" value="true" /> 
     </filter> 
    <filter class="org.apache.log4j.varia.DenyAllFilter"/> 
</appender> 


<!-- Logback configuration --> 
<appender name="myAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
    <file>${catalina.base}/logs/myApp.log</file> 
    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> 
     <fileNamePattern>${catalina.base}/logs/myApp.log.%i</fileNamePattern> 
     <minIndex>1</minIndex> 
     <maxIndex>10</maxIndex> 
    </rollingPolicy> 
    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> 
     <maxFileSize>20MB</maxFileSize> 
    </triggeringPolicy> 
    <filter class="ch.qos.logback.core.filter.EvaluatorFilter">  
     <evaluator> <!-- defaults to type ch.qos.logback.classic.boolex.JaninoEventEvaluator --> 
      <expression>return message.contains("PATTERN1");</expression> 
     </evaluator> 
     <OnMismatch>NEUTRAL</OnMismatch> 
     <OnMatch>ACCEPT</OnMatch> 
    </filter> 
    <filter class="ch.qos.logback.core.filter.EvaluatorFilter">  
     <evaluator> <!-- defaults to type ch.qos.logback.classic.boolex.JaninoEventEvaluator --> 
      <expression>return message.contains("PATTERN2");</expression> 
     </evaluator> 
     <OnMismatch>DENY</OnMismatch> 
     <OnMatch>ACCEPT</OnMatch> 
    </filter> 
    <encoder> 
     <pattern>%d %X{param} %-5p %m%n</pattern> 
    </encoder> 
</appender> 

NB: Jeśli konfiguracja wymaga użycia filtrów oceniającego jak moje, trzeba będzie zadeklarować janino i fotografia kompilator (ta sama wersja jako slf4j) w bibliotekach twojego projektu

Powiązane problemy