В некоторых случаях мне нужно немедленно принудительно очистить приложение файла журнала. Я нашел в документах , что эта опция включена по умолчанию. Таинственным образом это не работает. Как я вижу в источниках, в основу процесса вовлекается 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
это:
/somepath/file.log
file.log.%i
1
3
5MB
%d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n
Обновлено: Я бы предоставил модульный тест, но это кажется не таким уж простым. Позвольте мне более четко описать проблему.
immidiateFlush
верно по по умолчанию, поэтому метод flush()
вызывается явноЧуть позже, когда какой-то базовый буфер был заполнен, событие появляется в файле. Итак, вопрос :в том, гарантирует ли выходной поток немедленную очистку?
Честно говоря, я уже решил эту проблему, реализовав свой собственный ImmediateRollingFileAppender
, который использует возможность FileDescriptor
немедленной синхронизации. Любой, кому это интересно, может подписаться на это .
Так что это не проблема журнала.