Domanda

Ho usato log4j in un programma Java. L'ho inizializzato con:

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

Ma durante l'esecuzione del programma ottengo 3 istruzioni di registro anziché una. Ad esempio,

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

invece di una riga

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

Esistono ulteriori configurazioni da eseguire su log4j per evitarlo?

È stato utile?

Soluzione

Ho avuto un comportamento simile e si è scoperto che Log4J è stato configurato più di una volta; usando BasicConfigurator, ma anche con un file log4j.xml che avevo dimenticato. Potrebbe essere che ci sia un'ulteriore configurazione Log4J da qualche parte sul percorso di classe?

Altri suggerimenti

Molto probabilmente hai più di un appendice. Consulta il log4j manuale (Sezione: Appendici e layout):

  

Ogni richiesta di registrazione abilitata per un dato logger verrà inoltrata a tutti gli appendici in quel logger e agli appendici più in alto nella gerarchia.

Puoi provare a impostare il flag di additività su falso.

Bene, non hai mostrato come sta eseguendo il tuo programma. Ecco un programma completo che mostra solo una singola riga:

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");
    }
}

È possibile che il tuo codice sia realmente in esecuzione tre volte?

Nel mio caso, aggiungevo un nuovo appender ogni volta che chiamavo BasicConfigurator.configure ().

L'ho risolto ripristinando la configurazione:

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

Devo confessare che non capisco chiaramente cosa sta succedendo, ma sicuramente ha risolto il mio problema.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top