2013-04-09 33 views
6

Tôi có ba dự án riêng biệt, mỗi dự án có các tệp logback.xml được nhúng riêng của họ. Mỗi file bao gồm một tập tin cấu hình khai thác gỗ phổ biến ở durectory nhà của người dùng:Làm cách nào tôi có thể định cấu hình đăng nhập có điều kiện dựa trên tên ngữ cảnh?

<include file="${user_home}/loggingConfig.xml"/> 

Sau khi bao gồm, tôi có đặc điểm kỹ thuật này:

<root level="error"> 
    <appender-ref ref="${appender:-console}" /> 
</root> 

này cho phép người dùng cấu hình mức độ đăng nhập và appenders của họ và áp dụng chúng bằng tệp cấu hình ghi nhật ký lõi.

Ví dụ, trong ~/loggingConfig.xml Tôi có dòng này:

<property name="appender" value="file" /> 

Nhưng đồng nghiệp người thích nghỉ console logging rằng Line Out.

Vấn đề là tôi muốn sử dụng các ứng dụng khác nhau cho mỗi tệp nhật ký. Trong các từ khác, tôi muốn có điều kiện thiết lập một ứng dụng khác dựa trên dự án nào đang đọc tệp cấu hình tùy chỉnh.

Tôi nhận ra rằng tôi có thể định cấu hình từng dự án để đọc các tệp cấu hình có tên khác nhau, nhưng tôi muốn loại bỏ sự lộn xộn và cũng cho phép cấu hình được chia sẻ.

Trả lời

9

Tài liệu là một chút phụ tùng cho cấu hình nâng cao, nhưng tôi thấy rằng bạn có thể sử dụng tên ngữ cảnh logback làm biến có ghi có điều kiện. Vì vậy, đối với mỗi dự án tôi xác định một tên bối cảnh tùy chỉnh trong file dự án logback.xml:

<contextName>project1</contextName> 

vv ...

Sau đó, trong tập tin ~/loggingConfig.xml của tôi, tôi có thể làm điều này:

<property name="appender" value="file" /> 

<!--if condition='property("CONTEXT_NAME").equalsIgnoreCase("project1")'> 
    <then> 
     <property name="appender" value="file" /> 
    </then> 
</if--> 
<if condition='property("CONTEXT_NAME").equalsIgnoreCase("project2")'> 
    <then> 
     <property name="appender" value="console" /> 
    </then> 
</if> 
<if condition='property("CONTEXT_NAME").equalsIgnoreCase("project3")'> 
    <then> 
     <property name="appender" value="file" /> 
    </then> 
</if> 

Điều này có thể hơi phức tạp, nhưng thực tế tôi đang sử dụng giải pháp này để định cấu hình các thuộc tính được sử dụng bởi một ứng dụng duy nhất cho các dự án khác nhau, trong khi vẫn có dự phòng giá trị mặc định cho các dự án không có khối điều kiện.

4

Trong trường hợp này giúp bất cứ ai khác, đây là cách để tôi thiết lập cấu hình logback có điều kiện với một tài sản mà có thể chứa nhiều appenders:

<root level="${logback.loglevel}"> 
    <if condition='isDefined("logback.appenders")'> 
     <then> 
      <if condition='property("logback.appenders").contains("CONSOLE")'> 
       <then> 
        <appender-ref ref="CONSOLE"/> 
       </then> 
      </if> 
      <if condition='property("logback.appenders").contains("FILE")'> 
       <then> 
        <appender-ref ref="FILE"/> 
       </then> 
      </if> 
      <if condition='property("logback.appenders").contains("GELF")'> 
       <then> 
        <appender-ref ref="GELF"/> 
       </then> 
      </if> 
     </then> 
     <else> 
      <appender-ref ref="CONSOLE"/> 
     </else> 
    </if> 
</root> 
Các vấn đề liên quan