2014-05-14 16 views
17

Có cách nào để chúng tôi có thể ghi đè cấu hình đăng nhập không? Tôi biết rằng chúng tôi xác định các cấu hình logback trong tệp có tên logback.xml (thường được lưu trữ trong đường dẫn src/resources) và tôi biết rằng bằng cách sử dụng thẻ <include>, chúng tôi có thể đặt một tệp bên ngoài để thêm vào logback.xml như sau:Ghi đè cấu hình đăng nhập

<configuration> 

<!--<include url="file:///d:/ServerConfig.xml"/>--> 
<include file="${outPut}/ServerConfig.xml"/> 


<logger name="Server" LEVEL="DEBUG"> 
    <appender-ref ref="FILEOUT" /> 
</logger> 

<root level="DEBUG"> 
    <appender-ref ref="STDOUT" /> 
    <!--<appender-ref ref="FILEOUT" />--> 
</root> 

</configuration> 

Nhưng những gì nếu tôi muốn ghi đè lên cấu hình mặc định này (ví dụ thiết lập các logger gốc, mức độ để INFO)

bằng cách ở đây là các tập tin bao gồm:

<included> 

<!-- <property file="d:/ServerSysVar.properties"/>--> 
<property file="${outPut}/ServerSysVar.properties"/> 


<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
    <!-- encoders are assigned the type 
     ch.qos.logback.classic.encoder.PatternLayoutEncoder by default --> 
    <encoder> 
     <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> 
    </encoder> 
</appender> 



<appender name="FILEOUT" class="ch.qos.logback.core.FileAppender"> 
    <file>${Sys_Location}/Serverfile4.log</file> 
    <!-- encoders are assigned the type 
     ch.qos.logback.classic.encoder.PatternLayoutEncoder by default --> 
    <encoder> 
     <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} %class{36}.%M %L CLIENT_PORT:%X{ClientPort}- %msg%n</pattern> 
    </encoder> 
</appender> 


<logger name="Service" LEVEL="DEBUG"> 
    <appender-ref ref="FILEOUT" /> 
</logger> 

<root> 
    <appender-ref ref="STDOUT" /> 
    <!-- <appender-ref ref="FILEOUT" />--> 
</root> 

</included> 
+0

Có một lỗi thông báo trong năm 2011 có ý định để giải quyết vấn đề bằng cách ghi đè cấu hình với System Properties - http://jira.qos.ch/browse/LOGBACK- 239 – erkfel

+1

Cuộc thảo luận đó cho thấy sự bướng bỉnh đáng chú ý của tác giả chống thay đổi bất cứ điều gì đối với một số * học thuật * vô nghĩa. Tôi tự hỏi làm thế nào thực hiện điều này có thể vẫn còn sống? – tomasb

Trả lời

17

tôi don không nghĩ rằng bạn có thể ghi đè lên logback.xml -định nghĩa từ tệp được bao gồm.

Nhưng tôi có một phương pháp giải quyết câu hỏi của bạn liên quan đến trọng gốc-logger cấp, sử dụng variable substitution với các giá trị mặc định:

logback.xml

<configuration> 
    <include file="includedFile.xml" /> 

    <!-- STDOUT appender stuff --> 

    <root level="${root.level:-DEBUG}"> 
    <appender-ref ref="STDOUT" /> 
    </root> 
<configuration> 

includedFile.xml

<included> 

    <!-- override the default value; or comment out to leave it at default --> 
    <property name="root.level" value="INFO" /> 

</included> 

Với khái niệm đó, tôi thậm chí đã có thể kiểm soát đầu ra cho nhiều ứng dụng từ tệp được bao gồm:

logback.xml

<configuration> 
    <include file="includedFile.xml" /> 

    <!-- STDOUT appender stuff --> 

    <appender name="FILE" class="ch.qos.logback.core.FileAppender"> 
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> 
     <level>${file.level:-ALL}</level> 
    </filter> 
    <file>/path/to/logfeil.log</file> 
    <encoder> 
     <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> 
    </encoder> 
    </appender> 

    <appender name="SYSLOG" class="ch.qos.logback.classic.net.SyslogAppender"> 
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> 
     <level>${syslog.level:-OFF}</level> 
    </filter> 
    <syslogHost>localhost</syslogHost> 
    <facility>${syslog.facility:-LOCAL1}</facility> 
    <suffixPattern>${syslog.pattern:-[%thread] %logger{36} - %msg}</suffixPattern> 
    </appender> 

    <logger name="my.package" level="${logging.level:-INFO}" additivity="false"> 
    <appender-ref ref="FILE" /> 
    <appender-ref ref="SYSLOG" /> 
    </logger> 

    <root level="${root.level:-DEBUG}"> 
    <appender-ref ref="STDOUT" /> 
    </root> 
<configuration> 

Và trong includedFile.xml tôi có thể kiểm soát nếu, và vào những gì nhắn mức sẽ vượt qua appenders FILESYSLOG, thiết lập các thuộc tính file.level, syslog.level và tất nhiên logging.level.

2

Tôi gặp vấn đề tương tự với câu trả lời này có vẻ là cách tiếp cận tốt nhất.

Trong trường hợp của tôi, tôi cần ghi đè tệp đã bao gồm để tắt hoàn toàn một trong các ứng dụng.

Sử dụng biến cho giá trị cấp nhật ký, người ta có thể thay đổi thành TẮT.

<included> 
    (...) 
    <root level="${root.level.console:-DEBUG}"> 
    <appender-ref ref="CONSOLE" /> 
    </root> 
    <root level="${root.level.file:-DEBUG}"> 
    <appender-ref ref="FILE" /> 
    </root> 
</included> 

Như đã nêu trong http://logback.qos.ch/manual/configuration.html#rootElement

<configuration> 
    <include resource="base.xml" /> 
    (...) 
    <property name="root.level.console" value="OFF" /> 
</configuration> 
+0

Biến thể này không hoạt động đối với tôi. Tôi sử dụng phiên bản đăng nhập 1.1.3. Bạn đã sử dụng phiên bản nào? Ít nhất nó không hoạt động đối với thẻ tập tin của appender. Tôi đã cố gắng ghi đè tên tệp từ tệp được bao gồm – Geniy

+0

Điều quan trọng là phải đặt _ _ trước _ _ – Geniy

+0

Tài liệu nói "tối đa một phần là ", vì vậy nếu tác phẩm này có thể không có ý nghĩa đối với phần của chúng.Có vẻ như sẽ tốt hơn nếu bạn đặt phần tử bên trong tệp được bao gồm của mình. – Shannon

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