84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
日志系统,如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上是否有这样的强刷接口,可以查查资料;