2015-02-17 10 views
6

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

+0

Co stanie się, jeśli zamiast tego użyjesz log4j? 'import org.slf4j.LoggerFactory;/* (...) */LoggerFactory.getLogger ("access"). Error ("Just a test"); ' – Salem

+0

@Salem Próbowałem, ale nie działa. Wszystkie dzienniki są zapisywane tylko w pliku 'application.log'. – ajay

+0

Możliwe, że dzienniki nie są "natychmiast", ponieważ właściwość "natychmiastowy przepływ" ma wartość "fałsz". – CodeTripper

Odpowiedz

1

Spróbuj 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> 

W wzorca nazwy pliku umieścić ścieżkę główną aplikacją.

0

immediateFlush Właściwość Twojego appendera jest ustawiona na false, więc nie widzisz żadnych zmian w pliku access.log natychmiast. Po prostu usuń linię ze swojego pliku konfiguracyjnego xml.

From the logback documentation: Natychmiastowe opróżnienie strumienia wyjściowego zapewnia, że ​​rejestrowane zdarzenia są natychmiast zapisywane na dysku i nie zostaną utracone w przypadku, gdy aplikacja zostanie zamknięta bez prawidłowego zamknięcia aplikacji.

Powiązane problemy