2012-06-08 10 views
13

nel mio conf/application.conf Ho impostato il livello di registrazione dell'applicazione su DEBUG.Imposta il livello di registrazione per eseguire il debug nella produzione di Playframework 2.0?

logger.application=DEBUG 

Questo funziona bene quando ho sbt run la mia domanda. Tuttavia, quando lo eseguo in modalità produzione con sbt start, il livello di registro viene sostituito da INFO.

Esiste un modo per forzare la riproduzione a utilizzare DEBUG come livello di registro durante l'esecuzione in produzione?

risposta

14

Hai two different loggers: play logger e application logger. Ecco un esempio di logger.xml per la modalità di sviluppo:

<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> 

Qui il registratore di gioco è impostato per il livello di log> INFO e il vostro logger applicazione (quello utilizzato quando si fa Logger.debug/warn/error) è impostato per il livello di log> DEBUG. Il livello root è il livello predefinito per tutti i logger ma, poiché ogni logger definisce il proprio livello, non è necessario.

È possibile creare un file prod-logger.xml e avviare l'applicazione in modalità prod utilizzando: start -Dlogger.resource=conf/prod-logger.xml.

Ecco la configurazione che utilizzo per un server di produzione con due appendici per memorizzare il livello> DEBUG in un file e livello> WARN in un altro file. C'è anche un TimeBasedRollingPolicy per avere file in rotazione ogni giorno.

<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> 

Per ulteriori dettagli sulla configurazione di registrazione un'occhiata a Logback

+13

Questo funziona, ma io continuo a non capire il motivo per cui 'logger.application = DEBUG' in application.conf nella produzione viene ignorato. –

+2

Per la precisione non si memorizzano i messaggi di debug nell'appender FILE_DEBUG poiché sia ​​root che application sono impostati su un livello, INFO e WARN, che non consente il livello di log di debug. Per ottenere ciò che mi hai proposto, dovevo cambiare "root level =" WARN "" in "root level =" DEBUG "" e in . In ogni caso grazie per il tuo utilissimo esempio! –

Problemi correlati