IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Logging Java Discussion :

java.io.Exception "Can't get lock for file" - Quand ferme t-on le FileHandler ?


Sujet :

Logging Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 45
    Par défaut java.io.Exception "Can't get lock for file" - Quand ferme t-on le FileHandler ?
    Bonjour,
    J'ai une application qui utilise l'API java.util.logging.

    Cette application, basée sur Swing, log des messages en faisant appel à un seul FileHandler.

    Je rencontre l'exception java.io.Exception "Can't get lock for file..." et je ne vois pas trop d'où ça peut venir, d'autant plus que l'api logging est multi-thread safe.

    Je cherche donc dans un premier temps du côté de l'api logging pour voir si j'ai mal défini qqchose. Je me suis appuyé sur le tutoriel de cyberzoide pour mon code.

    En le relisant, j'ai vu slide 23 que le fileHandler, en tant que flux, doît être fermé (via sa méthode close()).
    Ma question est quand doit-on le fermer ?

    • Après chaque appel à logger.log ?
    • A la fermeture de l'application ? Ddans ce cas, comment fait-on pour récupérer d'un coup tous les handlers définis dans l'application ? Utiliser la méthode logger.getHandlers() remonte tous les handlers associé au logger défini dans la classe qu'on veut surveiller, pas dans toutes les classes ?


    Pensez-vous enfin que je cherche dans la bonne direction par rapport à mon problème initial "Can't get lock for file..." ?

  2. #2
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 45
    Par défaut
    Bon, je ne rencontre plus le problème, certainement parce que j'ai résolu mon problème de fond qui etait que je lançais mes threads avec seulement 15 millisecondes d'écarts (au lieu de 15 secondes): ça devait donc poser des problèmes d'écriture en fichier.

    Pour la question du fileHandler, j'appelle la méthode close à la fermeture de l'application par le bout de code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
        private void formWindowClosing(java.awt.event.WindowEvent evt) {                                   
            LogManager logManager = LogManager.getLogManager();
            Enumeration<String> loggers = logManager.getLoggerNames();
            while (loggers.hasMoreElements()) {
                String name = loggers.nextElement();
                System.out.println("name of logger: " + name + "\n");
                Logger logger = Logger.getLogger(name);
                Handler[] handlers = logger.getHandlers();
                for (int i = 0; i < handlers.length; i++) {
                    handlers[i].close();
                }
            }
            dispose();
            System.exit(0);
        }
    et ça a l'air de marcher !

    J'ai maintenant une toute autre question...

    Dans mon code, je crée mon logger et FileHandler ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
              FileHandler fh = new FileHandler("D:\\Docs\\NetBeansProjects\\MyProject\\MyLogFile.log", true);
              logger.addHandler(fh);
              logger.setLevel(Level.WARNING);
              SimpleFormatter formatter = new SimpleFormatter();
              fh.setFormatter(formatter);
    A l'exécution, mon code ne produit que des messages de niveau LEVEL.INFO. Donc, je ne trace rien dans le fileHandler.

    Pourquoi alors est ce que je me retrouve avec plusieurs fichiers de log de type MyLogFile.log.i avec i entier alors qu'il n'y a rien dans chaque fichier ?

    Je sais bien que dans le fichier de config logging.properties placé dans le répertoire jre/lib, je créé un fichier dès que la taille dépasse 50000 octets, mais comme je ne produis aucun message de LEVEL.WARNING, je ne devrais jamais atteindre cette limite de 50000 octets, et donc jamais avoir de fichiers MyLogFile.log.1, MyLogFile.log.2, etc...

  3. #3
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 45
    Par défaut
    Pas d'idée sur le problème que je décris ?

  4. #4
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 45
    Par défaut
    Help

  5. #5
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 45
    Par défaut
    Vu que mon post ne nécessite pas beaucoup d'intérêt, je prends peur tout d'un coup...

    Est ce que je raconte n'importe quoi ? Pourtant je n'en ai pas l'impression, mais je me trompe peut-être.

    C'est vrai que les logs, c'est pas très fun, mais si vous pouviez m'éclaire sur mon problème, ça serait sympa !

Discussions similaires

  1. Erreur "Can't get hostname for your address"
    Par Seb_590 dans le forum Installation
    Réponses: 8
    Dernier message: 02/08/2011, 09h29
  2. Réponses: 8
    Dernier message: 07/08/2007, 17h21
  3. ERROR 13: Can't get stat of
    Par michel.roger@items-si.fr dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 20/07/2005, 11h05
  4. [Exception]Probleme : Java.lang.Exception
    Par Nico66 dans le forum Général Java
    Réponses: 6
    Dernier message: 09/05/2005, 12h06
  5. ERROR 13: Can't get stat of
    Par delph_b dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 28/07/2004, 14h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo