日志系统,如log4j或者glog等等有没有对于日志落到磁盘上的时间有没有什么保证?如何实现日志系统能在1min内将日志写到磁盘上。
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
不能,為了提升效能,必然會使用記憶體緩衝,磁碟快取區之間的技術。
如果對落在硬碟上的時間有要求,可能需要自己來寫; 就像我們平常使用輸出使用的fprintf,為了性能考慮,運行庫的函數都是帶了緩衝的(緩存一般在4K左右,但不一定);有緩衝能減少系統調用的次數;可能調fprintf好幾次,才會有一次呼叫write真正寫到硬碟; 如果自己實現,為了即時性考慮,直接使用系統呼叫介面write()記錄日誌; 如果有1min的緩衝容忍,寫日誌的時候可以使用fprintf,但每分鐘呼叫一次fflush()強制日誌落到硬碟上; PS:log4j上是否有這樣的強刷接口,可以查查資料;
不能,為了提升效能,必然會使用記憶體緩衝,磁碟快取區之間的技術。
如果對落在硬碟上的時間有要求,可能需要自己來寫;
就像我們平常使用輸出使用的fprintf,為了性能考慮,運行庫的函數都是帶了緩衝的(緩存一般在4K左右,但不一定);有緩衝能減少系統調用的次數;可能調fprintf好幾次,才會有一次呼叫write真正寫到硬碟;
如果自己實現,為了即時性考慮,直接使用系統呼叫介面write()記錄日誌;
如果有1min的緩衝容忍,寫日誌的時候可以使用fprintf,但每分鐘呼叫一次fflush()強制日誌落到硬碟上;
PS:log4j上是否有這樣的強刷接口,可以查查資料;