2011-11-16 14 views

risposta

2

Ho riscontrato lo stesso problema e ho trovato una soluzione migliore. Prima di tutto dovrai iniziare da un log4j.xml aggiornato. Il mio aveva ancora cose come category e priority tag, che devono essere sostituiti rispettivamente da logger e level nella configurazione. Quindi rimuovere tutti gli appendici specifici come ad esempio RollingFileAppender. In seguito dovrai convertirli manualmente.

Quindi seguire le istruzioni da this blog per convertire il file log4j.xml in un file logback.xml utilizzando Xalan e un filtro di conversione XSLT. Dal momento che il contenuto di questo blog è piuttosto prezioso per la mia risposta, ho assicurato personalmente che questo articolo può essere found in the wayback machine per ogni evenienza. Inoltre, l'articolo non fornisce le versioni delle librerie richieste. Ecco quello che ho usato:

  • serializzatore-2.7.1
  • xalan-2.7.0
  • xercesImpl-2.6.2
  • xml-apis-1.3.02

Ed ecco la riga di comando che ha funzionato per me (eseguita nella stessa cartella in cui erano tutte le librerie e le risorse:

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

Ora la maggior parte del lavoro è già stata eseguita. Prima di tutto ho riorganizzato tutti i logger come se fossero nel file log4j.xml originale per un ulteriore confronto più facile. Quindi ho convertito gli appendici speciali a mano. È più facile di quanto sembri, lo documentation è piuttosto chiaro. Ecco un esempio (il più complesso ho avuto a che fare con la realtà):

<!-- 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: Se la configurazione richiede l'uso di filtri valutatore come il mio, è necessario dichiarare Janino e commons-compilatore (stessa versione come slf4j) nelle librerie del tuo progetto

Problemi correlati