1

java.util.logging 中的 FileHandler 类为它正在写入的文件实现了某种锁定机制。但是我发现应用程序完成后文件系统中有一个 .lck 文件。有没有办法针对 .lck 文件或整个锁定机制自定义 FileHandler 类的行为?

编辑:似乎当我关闭 FileHandler 对象时 .lck 文件消失了。这是想要的行为吗?我以某种方式期望应该自动调用 FileHandler 的 close 方法......

4

2 回答 2

0

您可以使用激活线程的功能 System.addShutdownHookFinalizer(Runnable r) 来关闭所有未关闭的内容。所以你将关闭 FileHandler 并且 .lck 文件将消失

于 2013-03-02T06:59:54.917 回答
0

似乎当我关闭 FileHandler 对象时 .lck 文件消失了。这是想要的行为吗?我以某种方式期望应该自动调用 FileHandler 的 close 方法

LogManager 有一个关闭钩子,如果 FileHandler 在关闭时它仍然连接到记录器,它将关闭它。问题是记录器可能会受到垃圾收集。如果发生这种情况,则 FileHandler 永远不会关闭。这包含在以下错误中:

  1. JDK-8060132 在 logging.properties 中的抽象节点上配置的处理程序并不总是正确关闭。
  2. JDK-6274920:JDK 记录器拥有对 java.util.logging.Logger 实例的强引用。

强烈引用您的记录器,以免它们被垃圾收集。

于 2017-06-23T17:08:30.620 回答