PlayFramework,使用xml自定义日志记录配置

时间:2015-01-19 00:03:40

标签: playframework logback

我使用2.3.6 play框架,我已经使用自定义xml配置文件设置了日志输出。

这是:

<conversionRule conversionWord="coloredLevel" converterClass="play.api.Logger$ColoredLevel" />

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${user.dir}/logs/application.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!-- Daily rollover with compression -->
        <fileNamePattern>application-%d{yyyy-MM-dd}.log</fileNamePattern>
        <!-- keep 30 days worth of history -->
        <maxHistory>5</maxHistory>
    </rollingPolicy>
    <encoder>
        <pattern>%date{yyyy-MM-dd HH:mm:ss ZZZZ} - [%level] - from %logger in %thread %n%message%n%xException%n</pattern>
    </encoder>
</appender>

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>%coloredLevel %logger{15} - %message%n%xException{5}</pattern>
    </encoder>
</appender>

<root level="ERROR">
    <appender-ref ref="STDOUT" />
    <appender-ref ref="FILE" />
</root>

<logger name="play" level="DEBUG">
    <appender-ref ref="STDOUT" />
</logger>

<logger name="application" level="DEBUG">
    <appender-ref ref="STDOUT" />
</logger>

<logger name="actors" level="DEBUG"/>
<logger name="models" level="DEBUG"/>

<logger name="com.avaje.ebean.config.PropertyMapLoader" level="OFF" />
<logger name="com.avaje.ebeaninternal.server.core.XmlConfigLoader" level="OFF" />
<logger name="com.avaje.ebeaninternal.server.lib.BackgroundThread" level="OFF" />
<logger name="com.gargoylesoftware.htmlunit.javascript" level="OFF" />
<logger name="com.google.api.client.http.HttpTransport" level="OFF"/>

使用这种配置,我的输出线加倍,我的意思是:

[info] play - database [default] connected at jdbc:postgresql://1.1.1.1/project.dev
[info] play - database [default] connected at jdbc:postgresql://1.1.1.1/project.dev
[info] play - Application started (Dev)
[info] play - Application started (Dev)

你能解释一下为什么吗?

我没有得到播放记录器和应用程序记录器之间的区别。 我认为层次结构是rootLogger - &gt; playLogger - &gt; applicationLogger - &gt;我的记录器。

package actors

import akka.actor.Props
import play.api.Logger

object MainCtrl {

  val log = Logger("actors.stat.MainCtrl")

我不明白为什么播放和应用程序记录器不能只是一个记录器

2 个答案:

答案 0 :(得分:0)

不同之处在于,一个是框架“Play”的记录器(你不能控制它的输出,你只需设置级别),另一个是实际应用程序的记录器。

尝试从“播放”记录器中删除appender。

答案 1 :(得分:0)

输出文件中重复行的原因是Appenders累积。 参与logback配置文档:

  

默认情况下,appender是累积的:记录器将记录附加到自身的appender(如果有的话)以及附加到其祖先的所有appender。因此,将同一个appender附加到多个记录器将导致日志记录输出重复。