2011-11-16 6 views

Trả lời

0

Nếu bạn có thể dịch nó bằng tay trở lại định dạng thuộc tính log4j bạn có thể sử dụng the log4j.properties to logback.xml translator trên khu vực dự án Logback.

+1

tôi biết điều này .. dù sao cũng cảm ơn. –

2

Tôi gặp phải vấn đề tương tự và tìm thấy giải pháp tốt hơn. Trước hết, bạn sẽ cần phải bắt đầu từ một log4j.xml cập nhật. Tôi vẫn có những thứ như categorypriority thẻ, phải được thay thế tương ứng theo loggerlevel trong cấu hình. Sau đó, xóa từng ứng dụng cụ thể như ví dụ RollingFileAppender. Bạn sẽ phải chuyển đổi chúng bằng tay sau đó.

Sau đó làm theo hướng dẫn từ this blog để chuyển đổi tệp log4j.xml của bạn thành tệp logback.xml bằng Xalan và bộ lọc chuyển đổi XSLT. Vì nội dung của blog này khá quý giá đối với câu trả lời của tôi, nên tôi chắc chắn rằng bài viết này có thể là found in the wayback machine chỉ trong trường hợp. Ngoài ra, bài viết không cung cấp các phiên bản của thư viện cần thiết. Dưới đây là một trong tôi sử dụng:

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

Và đây là dòng lệnh hoạt động cho tôi (được thực hiện trong cùng thư mục mà tất cả thư viện và tài nguyên là:

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

Bây giờ hầu hết công việc đã được thực hiện. Trước hết, tôi đã tổ chức lại tất cả các logger giống như trong tệp log4j.xml ban đầu để dễ so sánh hơn nữa. Sau đó, tôi chuyển đổi các ứng dụng đặc biệt bằng tay. Nó dễ hơn vẻ bề ngoài, documentation khá rõ ràng. Dưới đây là một ví dụ (phức tạp nhất mà tôi đã phải đối phó với thực tế):

<!-- 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: Nếu cấu hình của bạn đòi hỏi việc sử dụng các bộ lọc đánh giá tôi như thế, bạn sẽ cần phải tuyên bố janino và commons-biên dịch (cùng một phiên bản dưới dạng slf4j) trong thư viện của dự án