具有特定appender的多个记录器,用于logback中的每个记录器

时间:2014-01-27 09:06:29

标签: playframework playframework-2.1 logback appender

我正在使用Play框架,其中logback是默认的记录器引擎。我想在两个单独的文件中记录两个不同的活动(Log inTransaction),以便于跟踪。为此,我有两个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已登录... 到两个不同的文件。

1 个答案:

答案 0 :(得分:4)

您需要将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>