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?
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.