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.
Cosa succede se si utilizza log4j invece? 'import org.slf4j.LoggerFactory;/* (...) */LoggerFactory.getLogger ("accesso"). Error ("Solo un test"); ' – Salem
@Salem L'ho provato ma non sembra funzionare. Tutti i log vengono scritti solo nel file 'application.log'. – ajay
Potrebbe essere che i registri non vengono visualizzati "immediatamente" poiché la proprietà "immediateFlush" è impostata su false. – CodeTripper