2012-06-08 44 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''在。無論如何,謝謝你非常有幫助的例子! –

相關問題