Java 处理回写';s压缩的滚动文件

Java 处理回写';s压缩的滚动文件,java,synchronization,logback,Java,Synchronization,Logback,我已经配置了LogBack,以便它每小时滚动一次,创建一个文件,如log.20150806-10.log.zip 在一个特殊的线程中,我想定期检查是否有新的滚动文件,如果有,将它们上传到某个地方,然后删除它们 查看LogBack的源代码,它只是打开目标zip文件,开始写入并关闭它 我认为我的线程可能会在压缩器完成写入之前发现该文件 如果我不使用压缩,这可能不会是一个问题,因为只有文件重命名 我如何同步这个 appender和处理线程都在同一个JVM中运行。下面是我如何处理这个问题的 我停止使用

我已经配置了LogBack,以便它每小时滚动一次,创建一个文件,如log.20150806-10.log.zip

在一个特殊的线程中,我想定期检查是否有新的滚动文件,如果有,将它们上传到某个地方,然后删除它们

查看LogBack的源代码,它只是打开目标zip文件,开始写入并关闭它

我认为我的线程可能会在压缩器完成写入之前发现该文件

如果我不使用压缩,这可能不会是一个问题,因为只有文件重命名

我如何同步这个


appender和处理线程都在同一个JVM中运行。

下面是我如何处理这个问题的

  • 我停止使用LogBack的压缩功能。这样,LogBack通过重命名原始日志文件来创建新的滚动文件。在大多数平台上,文件重命名是原子的

  • 在另一个线程中,我正在检查新文件是否显示在目录中。一旦我看到一个新文件,我可以立即处理它

  • 我自己在做拉链压缩