2011-11-16 3 views

Répondre

2

J'ai rencontré le même problème et trouvé une meilleure solution. Tout d'abord, vous devrez commencer à partir d'un fichier log4j.xml à jour. Le mien avait encore des choses comme category et priority, qui doivent être remplacés respectivement par logger et level dans la configuration. Ensuite, supprimez tous les appenders spécifiques comme par exemple RollingFileAppender. Vous devrez les convertir manuellement après.

Puis suivez les instructions de this blog pour convertir votre fichier log4j.xml en fichier logback.xml en utilisant Xalan et un filtre de conversion XSLT. Comme le contenu de ce blog est plutôt précieux pour ma réponse, j'ai personnellement veillé à ce que cet article puisse être found in the wayback machine juste au cas où. En outre, l'article ne donne pas les versions des bibliothèques requises. Voici celui que j'utilisé:

  • sérialiseur-2.7.1
  • xalan-
  • 2.7.0 xercesImpl-2.6.2
  • xml-apis-1.3.02

Et voici la ligne de commande qui a fonctionné pour moi (exécuté dans le même dossier où toutes les bibliothèques et ressources étaient:

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

Maintenant, la plupart du travail est déjà fait. Tout d'abord, j'ai réorganisé tous les enregistreurs comme ils l'étaient dans le fichier log4j.xml d'origine pour faciliter la comparaison. Puis j'ai converti les appenders spéciaux à la main. C'est plus facile qu'il n'y paraît, le documentation est plutôt clair. Voici un exemple (le plus complexe que je devais traiter en fait):

<!-- 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: Si votre configuration nécessite l'utilisation de filtres d'évaluateur comme le mien, vous devrez déclarer janino et communes compilateur (même version comme slf4j) dans les bibliothèques de votre projet

Questions connexes