2009-03-07 8 views
0

J'ai utilisé log4j dans un programme java. J'initialisés avec:enregistrement répété dans le journal 4j en Java

BasicConfigurator.configure(); // logger configuration 
try { 
    logger.setLevel(Level.DEBUG); 
} catch (Exception e) { 
    System.out.println("Logfile not found"); 
} 

Mais, lors de l'exécution du programme que je reçois 3 déclarations de journaux au lieu d'un. Par exemple,

3 lines 
1047 [main] INFO ibis.Preproc.Ratings - Added AS TIMEZONE to tZones[0] = GMT-12:00 
1047 [main] INFO ibis.Preproc.Ratings - Added AS TIMEZONE to tZones[0] = GMT-12:00 
1047 [main] INFO ibis.Preproc.Ratings - Added AS TIMEZONE to tZones[0] = GMT-12:00 

au lieu d'une ligne

1047 [main] INFO ibis.Preproc.Ratings - Added AS TIMEZONE to tZones[0] = GMT-12:00 

Existe-t-il des configurations supplémentaires à faire pour log4j pour éviter cela?

Répondre

4

J'ai rencontré un comportement similaire, et il s'est avéré que Log4J a été configuré plusieurs fois; en utilisant BasicConfigurator, mais aussi avec un fichier log4j.xml que j'avais oublié. Se pourrait-il qu'il y ait une configuration Log4J supplémentaire quelque part sur le classpath?

2

Eh bien, vous n'avez pas montré comment votre programme s'exécute. Voici un programme complet qui ne montre qu'une seule ligne:

import org.apache.log4j.*; 

public class Test 
{ 
    public static void main(String[] args) 
    { 
     BasicConfigurator.configure(); // logger configuration 
     Logger logger = Logger.getLogger(Test.class); 
     logger.setLevel(Level.DEBUG); 
     logger.info("Hello"); 
    } 
} 

Est-il possible que votre code fonctionne réellement trois fois?

4

Vous avez probablement plus d'un appendice. Voir la log4j manual (Section: appenders et Layouts):

Chaque demande d'enregistrement est activée pour un enregistreur donné sera transmis à tous les appenders dans cet enregistreur ainsi que les appenders plus élevés dans la hiérarchie.

Vous pouvez essayer de définir l'indicateur d'additivité sur false.

0

Dans mon cas, j'ajoutais un nouvel appender chaque fois que j'appelais BasicConfigurator.configure().

Je l'ai résolu reseting la configuration:

BasicConfigurator.resetConfiguration() //reset first 
BasicConfigurator.configure() // then configure 

Je dois avouer que je ne comprends pas bien ce qui se passe, mais il sûrement résolu mon problème.

Questions connexes