2012-12-19 79 views
10

我有以下配置文件,它與Logback手冊中的標準示例非常相似。唯一的區別是添加[%F:%L]。當一切正常時,%F和%L不起作用。如果我刪除異步appender並直接使用文件appender進行登錄,則一切正常。Logback AyncAppender未打印文件和行號

有人可以解釋發生了什麼?以及如何打印這兩個參數應該的文件名和行號?

<configuration> 
    <appender name="FILE" class="ch.qos.logback.core.FileAppender"> 
    <file>myapp.log</file> 
    <encoder><pattern>%logger{35} - [%F:%L] - %msg%n</pattern></encoder> 
    </appender> 
    <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender"> 
     <appender-ref ref="FILE" /> 
    </appender> 
    <root level="DEBUG"><appender-ref ref="ASYNC" /></root> 
</configuration> 

回答

21

您需要AsyncAppender的includeCallerData屬性設置爲true。這裏是修改後的配置文件:

<configuration> 
    <appender name="FILE" class="ch.qos.logback.core.FileAppender"> 
     <file>myapp.log</file> 
     <encoder><pattern>%logger{35} - [%F:%L] - %msg%n</pattern></encoder> 
    </appender> 

    <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender"> 
     <appender-ref ref="FILE" /> 
     <!-- add the following line --> 
     <includeCallerData>true</includeCallerData> 
    </appender> 

    <root level="DEBUG"><appender-ref ref="ASYNC" /></root> 
</configuration> 
+2

哈,你知道你的東西:) – Klaus

+0

不適合我的問題。我使用1.2.16 –

0

我發佈了相同的答案在Groovy格式的人喜歡像我這樣的groovy風格。

appender('FILE', ch.qos.logback.core.FileAppender) { 
    file = 'myapp.log' 
    encoder(PatternLayoutEncoder) { 
     pattern = '%logger{35} - [%F:%L] - %msg%n' 
    } 
} 
appender('ASYNC', ch.qos.logback.classic.AsyncAppender) { 
    appenderRef('FILE') 
    //add the following line 
    includeCallerData = true 
} 

root(DEBUG, ['ASYNC'])