повторная регистрация в log4j в Java
Вопрос
Я использовал log4j в Java-программе. Я инициализировал это с помощью:
BasicConfigurator.configure(); // logger configuration
try {
logger.setLevel(Level.DEBUG);
} catch (Exception e) {
System.out.println("Logfile not found");
}
Но во время выполнения программы я получаю 3 оператора журнала вместо одного. Например,
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
вместо одной строки
1047 [main] INFO ibis.Preproc.Ratings - Added AS TIMEZONE to tZones[0] = GMT-12:00
Есть ли какие-либо дополнительные настройки, которые необходимо выполнить для log4j, чтобы избежать этого?
Решение
Я столкнулся с похожим поведением, и оказалось, что Log4J был настроен более одного раза; используя BasicConfigurator, но также и файл log4j.xml, о котором я забыл. Может быть, где-то на пути к классам есть дополнительная конфигурация Log4J?
Другие советы
Скорее всего, у вас есть несколько Аппендеров. См. Руководство по log4j (раздел «Приложения и макеты»):
Каждый включенный запрос на запись в журнал для данного регистратора будет перенаправляться всем добавителям в этом регистраторе, а также выше в иерархии.
Вы можете попробовать установить флаг аддитивности в false.
Ну, вы еще не показали, как работает ваша программа. Вот полная программа, которая показывает только одну строку:
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");
}
}
Возможно ли, что ваш код действительно выполняется три раза?
В моем случае я добавлял новый appender каждый раз, когда вызывал BasicConfigurator.configure (). Р>
Я решил, сбросив конфигурацию:
BasicConfigurator.resetConfiguration() //reset first
BasicConfigurator.configure() // then configure
Я должен признаться, что я не совсем понимаю, что происходит, но это, безусловно, решило мою проблему.