2013-01-04 33 views
10

Tôi muốn có một cấu hình log4j.xml và có thể đăng nhập vào bàn điều khiển trong khi phát triển ứng dụng của mình. Sau khi triển khai vào một môi trường tôi muốn chỉ đăng nhập vào một appender tập tin và không phải là giao diện điều khiển. Làm thế nào tôi có thể đạt được điều này?Log4j, vô hiệu hóa phụ thuộc vào môi trường

Đây là cấu hình hiện tại của tôi:

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> 

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> 

    <appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender"> 
     <param name="Threshold" value="DEBUG" /> 
     <param name="Target" value="System.out" /> 
     <layout class="org.apache.log4j.PatternLayout"> 
      <param name="ConversionPattern" value="%d{dd-MM-yyyy HH:mm:ss} %-5p%c{1} - %m%n" /> 
     </layout> 
    </appender> 

    <appender name="LogFileAppender" class="org.apache.log4j.RollingFileAppender"> 
     <param name="File" value="${log-base-dir}/${adapter-name}.log" /> 
     <param name="MaxFileSize" value="5000KB" /> 
     <param name="MaxBackupIndex" value="99" /> 
     <param name="append" value="true" />   
     <layout class="org.apache.log4j.PatternLayout"> 
      <param name="ConversionPattern" value="%d{dd-MM-yyyy HH:mm:ss} %-5p%c{1} - %m%n" /> 
     </layout> 
    </appender> 

    <root> 
     <level value="info" /> 
     <appender-ref ref="ConsoleAppender" /> 
     <appender-ref ref="LogFileAppender" /> 
    </root> 

</log4j:configuration> 
+0

Bạn có muốn sử dụng cùng một tệp và đạt được điều đó không? Bạn có thể phân biệt nhật ký nếu bạn thực thi các trường hợp thử nghiệm và triển khai.Tôi nghĩ rằng bạn phải tự thay đổi tập tin. – VinayVeluri

Trả lời

11

Một trong những giải pháp có thể tách các tập tin cấu hình log4j cho phát triểnsản xuất môi trường ví dụ:

  • log4j-development.xml - cho môi trường phát triển
  • log4j-production.xml - cho môi trường sản xuất

Sau đó, lệnh khởi động ứng dụng của bạn có thể có parrameter chỉ định tệp cấu hình log4j, ví dụ: java -Dlog4jconfig=log4j-development.xml -jar Application.jar

Bạn có thể định cấu hình log4j bằng cách nhận giá trị của thuộc tính log4jconfig trong mã của bạn, ví dụ: System.getProperty("log4jconfig").

Ưu điểm của giải pháp mà là như sau:

  • Bạn có thể chỉ định khai thác gỗ một cách độc lập (ConsoleAppenderLogFileAppender trong việc phát triển và chỉ LogFileAppender trong sản xuất)
  • Bạn có thể chỉ định mức độ khai thác gỗ của bạn cho mỗi môi trường (ví dụ error trong sản xuất và debug đang phát triển)
  • Bạn có thể định cấu hình trình ghi tệp độc lập, ví dụ: giữ nhật ký cho X ngày trong sản xuất (cho mục đích kiểm toán vv) và chỉ có một tệp nhật ký đang phát triển, v.v.

Mẫu đó được sử dụng trong nhiều máy chủ ứng dụng nơi bạn có nhiều môi trường (Phát triển, UAT, Dàn dựng, sản xuất, vv)

Ví dụ về log4j-development.xml

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> 

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> 

    <appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender"> 
     <param name="Threshold" value="DEBUG" /> 
     <param name="Target" value="System.out" /> 
     <layout class="org.apache.log4j.PatternLayout"> 
      <param name="ConversionPattern" value="%d{dd-MM-yyyy HH:mm:ss} %-5p%c{1} - %m%n" /> 
     </layout> 
    </appender> 

    <root> 
     <level value="debug" /> 
     <appender-ref ref="ConsoleAppender" /> 
    </root> 

</log4j:configuration> 

Ví dụ về log4j-production.xml

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> 

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> 

    <appender name="LogFileAppender" class="org.apache.log4j.RollingFileAppender"> 
     <param name="File" value="${log-base-dir}/${adapter-name}.log" /> 
     <param name="MaxFileSize" value="5000KB" /> 
     <param name="MaxBackupIndex" value="99" /> 
     <param name="append" value="true" />   
     <layout class="org.apache.log4j.PatternLayout"> 
      <param name="ConversionPattern" value="%d{dd-MM-yyyy HH:mm:ss} %-5p%c{1} - %m%n" /> 
     </layout> 
    </appender> 

    <root> 
     <level value="error" /> 
     <appender-ref ref="LogFileAppender" /> 
    </root> 

</log4j:configuration> 
+4

Là một biến thể về điều này, bạn luôn có thể tham chiếu 'log4j.xml' trong cấu hình nhưng có quá trình xây dựng của bạn (Maven/Ant), sao chép' log4j-production.xml' thành 'log4j.xml' khi tạo các JAR sản xuất. – AngerClown

+0

Tôi đã nhận thức được giải pháp này nhưng tôi đã tự hỏi nếu có một cách thông minh để chỉ có một tập tin log4j.zml thay vì sau đó hai để đáp ứng các yêu cầu tôi đã có. – Ash

6

Dễ dàng thực hiện bằng cách sử dụng thông số Threshold của người gắn thêm và JVM thuộc tính hệ thống. Ví dụ.

<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender"> 
    <param name="Threshold" value="${my.console.level}" /> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%d %-5p [%c{1}] %m%n" /> 
    </layout> 
</appender> 

Sau đó, khi bắt đầu ứng dụng trên sản sử dụng -Dmy.console.level=OFF

Đồng thời khi khởi động tại địa phương sử dụng -Dmy.console.level=ALL

Cả OFFALL là mức log4j hợp lệ.

+0

Hoạt động tốt cho tôi, tránh thêm tệp log4j khác cho sản xuất, cảm ơn – EPerrin95

Các vấn đề liên quan