Logback file appender nicht Spülen Sie sofort

Für einige Umstände, die ich brauche, um zu erzwingen, flushing, logback file appender sofort. Ich gefunden habe in docs diese option ist standardmäßig aktiviert. Auf mysteriöse Weise funktioniert das nicht. Wie ich sehe, in den Quellen zugrunde liegende Prozess beinhaltet BufferedOutputSream richtig. Gibt es irgendwelche Probleme mit BufferedOutputSream.flush() ? Wahrscheinlich ist dies eher im Zusammenhang mit der Spülung Problem.

Update:
Ich fand das Problem auf Windows XP Pro SP 3 und auf Red Hat Enterprise Linux Server release 5.3 (Tikanga).
Ich habe diese 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

Den logback.xml ist:

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

Aktualisiert:
Ich würde bieten ein Gerät testen, aber das scheint nicht so einfach.
Lassen Sie mich beschreiben, das Problem deutlicher.

  1. Ereignis-Protokollierung eingetreten ist
  2. - Ereignis übergeben wird, in den Datei-appender
  3. Veranstaltung serialisiert wird mit den vorgegebenen Muster
  4. Serialisierten Nachricht der Veranstaltung wird an den Datei-appender und ist
    darüber zu schreiben, um die Ausgabe-stream
  5. Schreiben in den stream beendet ist, wird der Ausgabe-stream geleert wird (ich habe
    überprüft die Umsetzung). Beachten Sie, dass immidiateFlush ist true
    Standard-so-Methode flush() aufgerufen wird ausdrücklich
  6. Kein Ergebnis in der Datei!

Etwas später, wenn einige zugrunde liegenden Puffer wurde, endete die Veranstaltung erscheint in der Datei.
Die Frage ist also: hat output-stream garantieren die unverzügliche flush?

Um ehrlich zu sein hab ich auch schon lösen, indem die Umsetzung meiner eigenen ImmediateRollingFileAppender nutzt und Einrichtung von FileDescriptor sofortige Synchronisierung. Wer Interesse an Folgen können diese.

So ist dies nicht ein logback Problem.

Auf welchem Betriebssystem hast du das entdeckt ?
Posten Sie Ihre logback-Konfiguration.
Können Sie bitte definieren Sie "auf Mysteriöse Weise" so funktioniert das nicht"? Die Bereitstellung eines unit-Tests sehr nützlich sein würde. BTW, welche version des JDK benutzt du?

InformationsquelleAutor Viktor Stolbin | 2012-08-06

Schreibe einen Kommentar