2012-07-30 83 views
1

java.util.logging中的FileHandler類爲正在寫入的文件實現某種鎖定機制。但是,我發現應用程序完成後,文件系統中會出現一個.lck文件。有沒有辦法自定義FileHandler類相對於.lck文件或整個鎖定機制的行爲?java.util.logging.FileHandler和多線程

編輯:看來,當我關閉FileHandler對象.lck文件消失。這是想要的行爲?我不知何故預計FileHandler的close方法應該被自動調用...

+0

我希望如果應用程序正常停止,並且如果應用程序崩潰或被終止,它會一直處於後面,lck文件將消失... – centic 2012-08-28 12:19:49

回答

0

你可以使用System.addShutdownHookFinalizer(Runnable r)函數來激活線程,這個工作就是關閉所有未關閉的東西。所以你將關閉FileHandler並且.lck文件將會消失

0

看來,當我關閉FileHandler對象時,.lck文件消失了。這是想要的行爲?我不知何故預期的FileHandler的close方法應自動

叫做LogManager中有一個關閉掛鉤,將關閉的FileHandler如果在關機的時候仍然附着在記錄器。問題是記錄器可能會被垃圾收集。如果發生這種情況,FileHandler永遠不會關閉。這是覆蓋在下面的錯誤:

  1. JDK-8060132 Handlers configured on abstract nodes in logging.properties are not always properly closed.
  2. JDK-6274920: JDK logger holds strong reference to java.util.logging.Logger instances.

保持很強的參考你的記錄器,以便它們不是垃圾收集。