2010-08-02 3 views
2

j'ai écrit un enregistreur sur mesure où la seule addition est la méthode suivante:Comment empêcher mon enregistreur d'écrire plusieurs instances d'un fichier journal?

public static synchronized Logger getLogger(String name) { 
    try { 
     boolean append = true; 
     FileHandler handler = new FileHandler("tmp.log", append); 
     Logger  log  = Logger.getLogger(name); 
     log.addHandler(handler); 
     return log; 
    } catch (java.io.IOException ex) { 
     //Logger.getLogger(LibraLogger.class.getName()).log(Level.SEVERE, null, ex); 
    } catch (SecurityException ex) { 
     //Logger.getLogger(LibraLogger.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    return Logger.getLogger(name); 
} 

Il produit une série de fichiers journaux tmp.log, tmp.log.1, tmp.log.2 etc.

Comment puis-je empêcher cela?

+0

Les enregistreurs de noms différents doivent-ils se connecter à des fichiers différents? –

+0

@Will Dieu no. Chaque classe est un enregistreur séparé, et par conséquent aurait un fichier pour chaque classe – TheLQ

Répondre

5

Dans votre logging.properties de contrôle du fichier que le java.util.logging.FileHandler.limit est réglé sur 0.

De la documentation:

java.util.logging.FileHandler.limit spécifie un nombre maximal approximatif pour écrire (en octets) dans un fichier . Si c'est zéro, alors il n'y a pas de limite . (Par défaut à aucune limite).

Pour un ensemble de rotation de fichiers, chaque fichier atteint une limite de taille donnée, il est fermé, mis en rotation sur, et un nouveau fichier ouvert. Les fichiers plus anciens sont nommés en ajoutant "0", "1", "2", etc dans le nom de fichier de base.

Une autre possibilité est que vous essayez d'écrire dans le même fichier journal à partir de plusieurs processus. Si l'enregistreur détecte qu'un fichier ne peut pas être ouvert (il est verrouillé par un autre processus), il en crée un nouveau, en y ajoutant le numéro libre suivant.

+1

Je pense que c'est ce qui se passe, même si la méthode est synchronisée, l'enregistreur est en train de détecter le fichier ne peut pas être ouvert. Des idées pour y arriver? – badcodenotreat

0

@badcodenotreat Je suis tombé sur votre question initiale parce que j'avais un problème similaire et j'ai trouvé la solution de @Romain Hippeau aussi utile. Maintenant, pour répondre à votre autre question:

"Même si la méthode est synchronisée, l'enregistreur détecte que le fichier ne peut pas être ouvert.

J'ai implémenté mon FileHandler dans sa propre classe en utilisant un modèle de conception singleton afin qu'une seule instance du fichier journal soit créée et renvoyée à mon application de journalisation principale chaque fois que cette requête est faite. J'espère que cela pourra aider.

Questions connexes