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
Questo funziona, ma io continuo a non capire il motivo per cui 'logger.application = DEBUG' in application.conf nella produzione viene ignorato. –
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! –