Вопрос

Я использовал 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

Я должен признаться, что я не совсем понимаю, что происходит, но это, безусловно, решило мою проблему.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top