對於某些情況下,我需要立即強制的logback的文件附加器沖洗。我在docs發現這個選項是默認啓用。神祕地這不起作用。正如我在源看到潛在的過程涉及BufferedOutputSream
正確。 BufferedOutputSream.flush()
有沒有問題?可能這與沖洗問題有關。的logback文件的appender衝不立即
更新: 我發現這個問題在Windows XP專業版SP 3和Red Hat Enterprise Linux服務器上發佈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>
更新時間: 我會提供一個單元測試,但似乎沒那麼簡單。 讓我更清楚地描述這個問題。發生
- 事件記錄的
- 事件被傳遞到文件附加器
- 事件被序列與定義的模式
- 事件的序列化消息被傳遞給文件附加器和是 即將寫出到輸出流
- 寫入流完成後,輸出流被刷新(我已經檢查了執行 )。請注意,
immidiateFlush
爲真 默認爲明確調用 - 文件中無結果!
稍後,當某些基礎緩衝區流動時,事件將出現在文件中。 所以,問題是:是否輸出流保證立即沖洗?
說實話,我已經通過實施我自己的ImmediateRollingFileAppender
解決了這個問題,它利用了即時同步的設備FileDescriptor
。任何有興趣的人都可以按照this。
所以這不是一個logback問題。
你發現了哪個操作系統? – 2012-08-09 06:41:50
發佈您的logback配置。 – gresdiplitude 2012-08-09 06:47:16
你能否定義「神祕的這不起作用」?提供單元測試將非常有用。順便說一下,你正在使用哪個版本的JDK? – Ceki 2012-08-09 15:41:26