2014-01-27 60 views
1

我正在使用Play框架,其中logback是默認記錄器引擎。我想在兩個單獨的文件中記錄兩個不同的活動(Log inTransaction),以便於跟蹤。爲此,我有兩個appender和兩個伐木工人。每個記錄器都標有特定的appender。logback中的每個記錄器的特定appender的多個記錄器

<appender name="TRANSACTION" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
    <fileNamePattern>${application.home}/logs/transaction/transaction-%d{yyyy-MM-dd HH}.log</fileNamePattern> 
    </rollingPolicy> 
    <encoder> 
    <pattern>%message%n</pattern> 
    </encoder> 
</appender> 
<appender name="LOGIN" class="ch.qos.logback.core.FileAppender"> 
    <file>${application.home}/logs/log-in-record.log</file> 
    <encoder> 
    <pattern>%date - [%level] - from %logger in %thread %n%message%n%xException%n</pattern> 
    </encoder> 
</appender> 

<logger name="transaction" level="INFO"> 
    <appender-ref ref="TRANSACTION" /> 
</logger> 
<logger name="log-in" level="INFO"> 
    <appender-ref ref="LOGIN" /> 
</logger> 

我想通過交易記錄交易活動日誌如play.Logger.of("transaction").info("Test Transaction Log\r\nHere is another line"); 並登入或登錄日誌如play.Logger.of("log-in").info("user X has logged in ...");

註冊相關的活動,但它不工作。有任何想法嗎?

編輯

通過「不工作」我的意思是相同的日誌被附加到這兩個記錄器,而不是具體到特定的日誌。例如。如果我從我的Play代碼撥打play.Logger.of("log-in").info("user X has logged in ...");,則交易交易登錄記錄器正在記錄用戶X已登錄...爲兩個不同的文件。

+0

你是什麼意思正是通過「不工作」?根本沒有日誌消息? –

+0

@BalázsMáriaNémeth:我的編輯低於原文。感謝您的高效查詢。 –

+0

我在看https://github.com/playframework/playframework/blob/master/framework/src/play/src/main/scala/play/api/Logger.scala,但我找不到答案。如果您在此沒有收到任何回覆,請嘗試使用Google Play組織列表。 –

回答

2

您需要添加additivity="false"到您的伐木者

<logger name="transaction" level="INFO" additivity="false"> 
    <appender-ref ref="TRANSACTION" /> 
</logger> 
<logger name="log-in" level="INFO" additivity="false"> 
    <appender-ref ref="LOGIN" /> 
</logger>