2014-01-27 59 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>