Pergunta

Eu costumava log4j em um programa java. Eu inicializado-lo com:

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

Mas, durante a execução do programa eu recebo 3 declarações de log em vez de um. Por exemplo,

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

em vez de uma linha

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

Existem quaisquer configurações extras a serem feitas para log4j para evitar isso?

Foi útil?

Solução

Eu já teve comportamento semelhante, e descobriu-se que Log4J foi configurado mais de uma vez; usando o BasicConfigurator, mas também com um arquivo log4j.xml eu tinha esquecido. Será que há um lugar configuração Log4J adicional no classpath?

Outras dicas

Muito provavelmente você tem mais de um appenders. Veja o log4j manual (Seção: appenders e Layouts):

Cada habilitado pedido o registo para um determinado logger serão encaminhadas para todos os appenders em que logger, bem como os appenders superior na hierarquia.

Você pode tentar definir a bandeira aditividade como falsa.

Bem, você não têm mostrado como o programa está em execução. Aqui está um completo programa que mostra apenas uma única linha:

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

É possível que o código realmente está sendo executado três vezes?

No meu caso, eu estava adicionando um novo appender cada vez que eu liguei o BasicConfigurator.configure ().

Eu resolvi zerando a configuração:

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

Devo confessar que eu não entender claramente o que está acontecendo, mas certamente resolveu o meu problema.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top