2012-07-30 6 views
1

La classe FileHandler de java.util.logging implémente une sorte de mécanisme de verrouillage pour le fichier dans lequel elle écrit. Cependant, j'ai trouvé qu'il ya un fichier .lck qui traîne dans le système de fichiers après une application est terminée. Est-il possible de personnaliser le comportement de la classe FileHandler par rapport aux fichiers .lck ou à l'ensemble du mécanisme de verrouillage?java.util.logging.FileHandler et multithread

EDIT: Il semble que lorsque je ferme l'objet FileHandler, les fichiers .lck disparaissent. Est-ce un comportement recherché? Je m'attendais d'une manière ou d'une autre à ce que la méthode close de FileHandler soit appelée automatiquement ...

+0

Je m'attendrais à ce que le fichier lck disparaisse si l'application est arrêtée gracieusement et qu'elle reste derrière si l'application se bloque ou est tuée ... – centic

Répondre

0

Vous pouvez utiliser la fonction System.addShutdownHookFinalizer (Runnable r) qui active le thread qui consiste à fermer tout ce qui n'est pas fermé. donc vous fermerez le FileHandler et le fichier .lck sera supprimé

0

Il semble que lorsque je ferme l'objet FileHandler, les fichiers .lck disparaissent. Est-ce un comportement recherché? Je pensais en quelque sorte que l'on devrait appeler automatiquement

méthode proche du FileHandler Le LogManager a un crochet d'arrêt qui clôturera la FileHandler si elle est toujours attachée à l'enregistreur au moment de l'arrêt. Le problème est que les enregistreurs peuvent être soumis à la récupération de place. Si cela arrive, le FileHandler n'est jamais fermé. Ceci est couvert dans les bugs suivants:

  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.

Gardez une forte référence à vos enregistreurs afin qu'ils ne sont pas des déchets collectés.