2015-02-17 11 views
6

Ho un server di riproduzione (Play framework 2.3) implementato in Java. Voglio mantenere i registri delle chiamate API nei file che limitano il numero massimo di file e la dimensione massima di ciascun file. Ho il seguito application-logger.xml file diCome registrare i dati nei file in Play framework?

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
    <file>/home/ajay/projects/application.log</file> 
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
     <!-- Daily rollover with compression --> 
     <fileNamePattern>application-log-%d{yyyy-MM-dd}.gz</fileNamePattern> 
     <!-- keep 30 days worth of history --> 
     <maxHistory>30</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="ACCESS_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
    <file>/home/ajay/projects/access.log</file> 
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
     <!-- daily rollover with compression --> 
     <fileNamePattern>access-log-%d{yyyy-MM-dd}.gz</fileNamePattern> 
     <!-- keep 1 week worth of history --> 
     <maxHistory>7</maxHistory> 
    </rollingPolicy> 
    <encoder> 
     <pattern>%date{yyyy-MM-dd HH:mm:ss ZZZZ} %message%n</pattern> 
     <!-- this quadruples logging throughput --> 
     <immediateFlush>false</immediateFlush> 
    </encoder> 
</appender> 

<!-- additivity=false ensures access log data only goes to the access log --> 
<logger name="access" level="INFO" additivity="false"> 
    <appender-ref ref="ACCESS_FILE" /> 
</logger> 

<root level="INFO"> 
    <appender-ref ref="FILE"/> 
</root> 

che ho preso da here. Non capisco completamente la configurazione di cui sopra. Io uso le seguenti righe per accedere al file di access.log

import play.Logger; 

// log in the access.log file 
final Logger.ALogger accessLogger = Logger.of("access"); 
accessLogger.info("Logging api call from the client"); 

Tuttavia, non funziona. Il file access.log è vuoto mentre tutto il logging va nel file application.log. Ho commentato tutte le impostazioni del logger in application.conf. Quando ho guardato nel file Logger.class, ho trovato questa linea

private static final ALogger logger = of("application"); 

E 'questo il motivo per cui non funziona? Si prega di suggerire come risolverlo.

+0

Cosa succede se si utilizza log4j invece? 'import org.slf4j.LoggerFactory;/* (...) */LoggerFactory.getLogger ("accesso"). Error ("Solo un test"); ' – Salem

+0

@Salem L'ho provato ma non sembra funzionare. Tutti i log vengono scritti solo nel file 'application.log'. – ajay

+0

Potrebbe essere che i registri non vengono visualizzati "immediatamente" poiché la proprietà "immediateFlush" è impostata su false. – CodeTripper

risposta

1

Prova questa appender:

<appender name="CUSTOM" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
     <file>${application.home}/logs/agent.log</file> 
     <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
      <fileNamePattern>${application.home}/logs/old/myLog-%d{yyyy-MM-dd}.log.%i</fileNamePattern> 
      <maxHistory>30</maxHistory> 
      <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> 
       <maxFileSize>100MB</maxFileSize> 
      </timeBasedFileNamingAndTriggeringPolicy> 
     </rollingPolicy> 
     <encoder> 
      <pattern>%date %M %logger{0} %message%n</pattern> 
     </encoder> 
    </appender> 

Nel modello di nome file mettere il percorso casa applicazione.

0

immediateFlush la proprietà dell'appender è impostata su false, quindi non si vedono immediatamente modifiche nel file access.log. Basta rimuovere

<immediateFlush>false</immediateFlush> 

linea dalla configurazione xml.

From the logback documentation: Lo scarico immediato del flusso di output assicura che gli eventi di registrazione vengano scritti immediatamente sul disco e non andranno persi nel caso in cui l'applicazione venga chiusa senza chiudere correttamente gli allegati.