java - Logback的压缩滚动文件的处理

标签 java synchronization logback

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

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

查看LogBack的来源Compressor.java ,它只是打开目标 zip 文件,开始写入并关闭它。

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

如果我不使用压缩,这可能不会成为问题,因为这样就只是文件重命名。

如何同步?

追加器和处理线程都在同一个 JVM 中运行。

最佳答案

这是我处理这个问题的方法。

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

  • 在一个单独的线程中,我正在检查目录中是否出现新文件。一旦我看到新文件,我就可以立即处理它。

  • 我自己进行 ZIP 压缩。

关于java - Logback的压缩滚动文件的处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31851153/

相关文章:

php - 将数据从服务器同步到 Android 设备的建议

Java 同步 - 这个简单的方法需要它吗?

java - 使用 3 个 PetersonLock 的数组来同步 4 个进程

grails - 有没有办法将 Grails 数据源注入(inject) logback.groovy 以便与 DBAppender 一起使用?

gradle - 如何为 logback-redis-appender 指定 redis 客户端依赖

java - 如何解析 '21Jul12'这样的日期字符串

java - 由 Map.ofEntries() 创建的 map 的访问时间复杂度是否与 o(1) 的 HashMap 相同?

java - 如何使用rabbitTemplate receiveAndReply

java - Eclipse插件: Custom plugin. xml类编辑器

java - 如何使用 Spring Boot 配置 logback-access.xml