2011-11-16 38 views

回答

2

我遇到了同樣的問題並找到了更好的解決方案。首先,您需要從最新的log4j.xml開始。我仍然有像categorypriority標籤的東西,在配置中必須分別替換爲loggerlevel。然後刪除每個特定的appender,例如RollingFileAppender。之後你將不得不手動轉換這些。

然後按照this blog的指示將log4j.xml文件轉換爲使用Xalan和XSLT轉換過濾器的logback.xml文件。由於這個博客的內容對我的答案來說非常寶貴,我個人認爲這篇文章可以是found in the wayback machine以防萬一。另外,該文章不提供所需庫的版本。下面是我用了一個:

  • 串行器2.7.1
  • 的Xalan-2.7.0
  • xercesImpl-2.6.2
  • XML的API-1.3.02

這裏是我工作的命令行(在所有庫和資源所在的文件夾中執行):

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

現在大部分工作已經完成。首先,我重組了所有的記錄器,就像它們在原始log4j.xml文件中一樣,以便於進一步比較。然後我手工轉換了特殊的appender。它比看起來更容易,documentation比較清楚。下面是一個例子(最複雜的,我不得不處理實際):

<!-- 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> 

注意:如果您的配置要求使用評估過濾器像我這樣的,你需要聲明JANINO和公共編譯器(版本相同作爲slf4j)在您的項目庫

相關問題