В некоторых случаях мне необходимо принудительно промыть файл в приложении logback file. Я нашел в docs эта опция включена по умолчанию. Таинственно это не работает. Как я вижу в исходных процессах, исходный процесс включает BufferedOutputSream
правильно. Есть ли проблемы с BufferedOutputSream.flush()
? Вероятно, это связано с проблемой промывки.
Обновление: Я нашел проблему на Windows XP Pro SP 3 и на Red Hat Enterprise Linux Server версии 5.3 (Tikanga). Я использовал эти библиотеки:
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
:
<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>
Обновлено: Я бы предоставил unit test, но это не так просто. Позвольте мне более подробно описать проблему.
- Событие регистрации произошло
- Событие передается в файл appender
- Событие сериализуется с определенным шаблоном
- Сериализованное сообщение события передается файловому приложению и собирается записать в выходной поток
- Запись в поток завершена, поток вывода очищается (я
проверили реализацию). Заметим, что
immidiateFlush
истинно по умолчанию, поэтому методflush()
явно вызывается - В файле нет результата!
Несколько позже, когда был запущен некоторый базовый буфер, в файле появляется событие. Поэтому возникает вопрос: обеспечивает ли поток вывода немедленный сброс?
Честно говоря, я уже решил это, реализовав свой собственный ImmediateRollingFileAppender
, который использует средство FileDescriptor
для непосредственной синхронизации. Любой, кто заинтересован, может следовать этому.
Итак, это не проблема с журналом.