java - 清理 Java 8 中的锁 (.lck) 文件

标签 java java-8 java.util.logging

java 8 似乎对锁定文件的处理方式进行了更改,导致我积累了大量 .lck 文件。

我想通过向我的应用程序添加一些代码来解决这个问题,以便在每次运行时清理输出目录中的锁定文件。然而,Java 不会保持此文件打开,这意味着如果我打开应用程序的第二个实例(常见用例),那么这将导致它删除锁定文件,并在尝试重新使用与另一个相同的日志文件时立即挂起实例。

有人以更优雅的方式缓解了这个问题吗?

<小时/>

已确认这是至少 8u25 中的错误。不良行为在 Oracle 8u40 JRE 中消失。

最佳答案

这在 Is java.util.logging.FileHandler in Java 8 broken? 中有介绍。 。将 JDK 8 更新为 update 40 or newer其中包含 fix for JDK-8048020 .

当 FileHandler 打开时,您应该会看到锁定文件。如果您看到它们在 VM 退出后徘徊,那么这是因为 FileHandler 未关闭,VM 在处理程序关闭 Hook 运行时停止或崩溃,或者在尝试删除它们时发生 I/O 异常。

您所运行的平台在执行FileLock时也发挥着作用。由 FileHandler 使用。 FileLock 文档附带以下警告:

Whether or not a lock actually prevents another program from accessing the content of the locked region is system-dependent and therefore unspecified. The native file-locking facilities of some systems are merely advisory, meaning that programs must cooperatively observe a known locking protocol in order to guarantee data integrity. On other systems native file locks are mandatory, meaning that if one program locks a region of a file then other programs are actually prevented from accessing that region in a way that would violate the lock. On yet other systems, whether native file locks are advisory or mandatory is configurable on a per-file basis. To ensure consistent and correct behavior across platforms, it is strongly recommended that the locks provided by this API be used as if they were advisory locks.

这意味着 FileHandler 在不同平台上可以有不同的锁定行为。

与锁定文件相关的还有记录器的垃圾收集,它不会关闭附加的处理程序。这些问题包含在 JDK-8060132: 中。在logging.properties中的抽象节点上配置的处理程序并不总是正确关闭,并且JDK-6274920: JDK 记录器拥有对 java.util.logging.Logger 实例的强引用。

关于java - 清理 Java 8 中的锁 (.lck) 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28708247/

相关文章:

scala - 如何在 scala 中使用 java8 lambda 和函数

java - 使用 Java 8 Optional<T>, Stream 遍历包含真实 boolean 字段值的对象列表

spring - Tomcat 7 : Setting logging level for org. Spring 框架库

java.util.logging 不会记录到文件

java - (Java 8) java.util.function.Supplier

java util logging.properties : How to log to two different files

java - iText 兼容性问题

Java球移动

java - If 语句显示特定的警报对话框

java - STGroupDir 的字符串模板 4 问题