2012-06-08 43 views
13

在我的conf/application.conf我将我的应用程序的日志记录级别设置为DEBUG将日志记录级别设置为在Playframework 2.0生产中进行调试?

logger.application=DEBUG 

这工作正常,当我sbt run我的申请。但是,当我使用sbt start以生产模式运行它时,日志级别会被覆盖到INFO

有没有一种方法可以强制播放使用DEBUG作为生产中运行时的日志级别?

回答

14

您有two different loggersplay记录器和application记录器。 这里是发展模式logger.xml的例子:

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

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

    <logger name="play" level="INFO" /> 
    <logger name="application" level="DEBUG" /> 

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

</configuration> 

这里播放记录器设置日志级别>信息和应用程序日志中记录(做Logger.debug/warn/error当你使用一个)设定日志级别> DEBUG。根级别是所有记录器的默认级别,但是由于每个记录器都定义了自己的级别,因此不需要。

您可以使用以下命令创建prod-logger.xml文件并以prod模式启动应用程序:start -Dlogger.resource=conf/prod-logger.xml

以下是我用于具有两个appender的生产服务器的配置,用于将level> DEBUG存储在文件中,并在另一个文件中存储level> WARN。还有一个TimeBasedRollingPolicy让文件每天滚动。

<configuration> 
    <appender name="FILE_DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
     <file>${application.home}/logs/debug_log.log</file> 
     <encoder> 
      <pattern>%date - [%level] - from %logger in %thread %n%message%n%xException%n</pattern> 
     </encoder> 
     <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> 
      <level>DEBUG</level> 
     </filter> 
     <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
      <fileNamePattern>${application.home}/logs/debug_log.%d{yyyy-MM-dd}.log</fileNamePattern> 
      <maxHistory>30</maxHistory> 
     </rollingPolicy> 
    </appender> 

    <appender name="FILE_WARN" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
     <file>${application.home}/logs/warn_log.log</file> 
     <encoder> 
      <pattern>%date - [%level] - from %logger in %thread %n%message%n%xException%n</pattern> 
     </encoder> 
     <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> 
      <level>WARN</level> 
     </filter> 
     <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
      <fileNamePattern>${application.home}/logs/warn_log.%d{yyyy-MM-dd}.log</fileNamePattern> 
      <maxHistory>60</maxHistory> 
     </rollingPolicy> 
    </appender> 

    <logger name="play" level="INFO"/> 
    <logger name="application" level="INFO" /> 

    <root level="WARN"> 
     <appender-ref ref="FILE_DEBUG"/> 
     <appender-ref ref="FILE_WARN"/> 
    </root> 
</configuration> 

有关记录的配置更详细的看一下Logback

+13

这工作,但我还是不明白,为什么在生产application.conf“logger.application = DEBUG”被忽略。 –

+2

准确地说,您并未将调试消息存储在FILE_DEBUG appender中,因为根和应用程序都设置为级别INFO和WARN,不允许调试日志级别。为了实现你的建议,我必须在'root level =“DEBUG''和中改变'root level ='WARN''在。无论如何,谢谢你非常有帮助的例子! –

相关问题