Logback-在写入文件之前压缩日志行

问题描述

我不确定是否基本上可以在日志行到达logback附加程序时对其进行gzip压缩,而不是在我们进行日志旋转时压缩文件。这是完全有可能的吗?如果可以的话,该如何实现呢?“动态”压缩而不是整个文件压缩有很多好处吗?

解决方法

好的。您可以简单地保持gzip压缩过程打开并在其进入​​时对其进行馈送。这将大大减少日志文件所需的空间,并且平均不会占用更多的CPU资源,因为您最终还是要对其进行压缩。

缺点是在任何时候压缩日志文件都不会包含许多已经提供的日志行,因为压缩过程存在延迟和突发性。在发射压缩块之前,将需要累积许多行。其次,压缩文件在关闭之前将不是有效的gzip文件。您仍然可以解压缩其中的内容,但是不会包含带有检查值的预告片。如果进程被终止或机器崩溃,您将得到一个无效的gzip文件,该文件没有最新的几行日志。当然,最新的日志行可能正是您最感兴趣的日志行,以查找发生了什么问题。

所有这些缺点都可以通过本应用程序的专用方法来解决,该方法在gzlog.h / gzlog.c中实现。 gzlog确保在写入每一行之后,gzip压缩的日志文件是完整且有效的,并且包含该日志行。此外,即使gzlog进程本身在添加日志行的过程中被中断,它也可以使用最后提供的日志行来重建gzip文件。