Mam serwer Play (Play 2.3) zaimplementowany w Javie. Chcę przechowywać logi wywołań API w plikach ograniczających maksymalną liczbę plików i maksymalny rozmiar każdego pliku. Mam poniżej application-logger.xml
plikJak rejestrować dane w plikach w strukturze Google Play?
<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>
które podjęły z here. Nie w pełni rozumiem powyższą konfigurację. Używam następujące linie do zalogowania się access.log
pliku
import play.Logger;
// log in the access.log file
final Logger.ALogger accessLogger = Logger.of("access");
accessLogger.info("Logging api call from the client");
Jednak to nie działa. Plik access.log
jest pusty, a wszystkie rejestrowania są przesyłane do pliku application.log
. Skomentowałem wszystkie ustawienia rejestratora w application.conf
. Kiedy spojrzałem w pliku Logger.class
, znalazłem ten wiersz
private static final ALogger logger = of("application");
Czy to powód, dlaczego to nie działa? Proszę zasugerować, jak mogę to naprawić.
Co stanie się, jeśli zamiast tego użyjesz log4j? 'import org.slf4j.LoggerFactory;/* (...) */LoggerFactory.getLogger ("access"). Error ("Just a test"); ' – Salem
@Salem Próbowałem, ale nie działa. Wszystkie dzienniki są zapisywane tylko w pliku 'application.log'. – ajay
Możliwe, że dzienniki nie są "natychmiast", ponieważ właściwość "natychmiastowy przepływ" ma wartość "fałsz". – CodeTripper