W niektórych okolicznościach muszę natychmiast wymusić opróżnienie w aplikacji wysyłającej logback. Znalazłem w docs ta opcja jest domyślnie włączona. Tajemniczo to nie działa. Jak widzę, w źródłach leżących u podstaw procesu jest prawidłowo wpisana BufferedOutputSream
. Czy są jakieś problemy z BufferedOutputSream.flush()
? Prawdopodobnie jest to raczej związane z kwestią płukania.Aplikator plików logback nie od razu się spłukuje.
Aktualizacja : Znalazłem problem w systemie Windows XP Pro SP 3 i systemie Red Hat Enterprise Linux Server w wersji 5.3 (Tikanga). użyłem tych libs:
jcl-over-slf4j-1.6.6.jar
logback-classic-1.0.6.jar
logback-core-1.0.6.jar
slf4j-api-1.6.6.jar
logback.xml
brzmi:
<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/somepath/file.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>file.log.%i</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>3</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>5MB</maxFileSize>
</triggeringPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="FILE"/>
</root>
</configuration>
aktualizacja: Chciałbym zapewnić badanej jednostki, ale to nie wydaje się takie proste. Pozwolę sobie bardziej precyzyjnie opisać problem.
- Zdarzenie logowania wystąpił
- Event są przekazywane do pliku appender
- zdarzeń jest w odcinkach o określonej strukturze
- Serialized wiadomość imprezy zostanie przekazany do appender pliku i jest zamiar pisać do wyjścia stream
- Zapisywanie do strumienia jest zakończone, strumień wyjściowy jest przepłukiwany (sprawdziłem implementację pod kątem ). Zauważ, że
immidiateFlush
jest domyślnie ustawione na , więc metodaflush()
jest wywoływana jawnie - Brak wyniku w pliku!
Nieco później, po przepłynięciu bufora bazowego, zdarzenie pojawiło się w pliku. Pytanie brzmi: czy strumień wyjściowy gwarantuje natychmiastowy spłukanie?
Szczerze mówiąc, rozwiązałem już to, wprowadzając własne ImmediateRollingFileAppender
, które wykorzystuje obiekt FileDescriptor
natychmiastowej synchronizacji. Każdy zainteresowany może śledzić numer this.
To nie jest kwestia logback.
Na jakim systemie operacyjnym to odkryłeś? –
Opublikuj konfigurację logowania. – gresdiplitude
Czy potrafisz zdefiniować "Tajemniczo to nie działa"? Zapewnienie testu jednostkowego byłoby bardzo przydatne. BTW, której wersji JDK używasz? – Ceki