log4j и weblogic: повторяющиеся сообщения журнала - PullRequest
5 голосов
/ 17 августа 2011

Я использую log4j для входа в свой проект. Вот пример установки:

public class MyClass {
  private final Logger logger = Logger.getLogger(MyClass.class);

  public MyClass() {
    BasicConfigurator.configure();
    Logger.getLogger(MyClass.class).setLevel(Level.INFO);
  }

  ...

}

Проблема в том, что при каждом следующем вызове регистратора дублируются сообщения журнала (я имею в виду, что при первом вызове только 1 сообщение, при втором вызове 2 одинаковых сообщения, затем 3 и т. Д.). Кажется, что каждый раз, когда новый экземпляр регистратора создается и используется со всеми старыми экземплярами.
Как избежать этой проблемы? Спасибо.

УПП. Пытался сделать это статичным, но это все равно не работает. Я все еще получаю несколько сообщений журнала. Есть идеи? Вероятно, какие-то специфичные для Weblogic вещи?

Ответы [ 4 ]

4 голосов
/ 17 августа 2011

Сделать регистратором static

private static final Logger logger = Logger.getLogger(MyClass.class);

Ключевым моментом здесь является создание Logger для каждого класса, а не для каждого экземпляра.

2 голосов
/ 18 августа 2011

попробуйте установить аддитивность false программно или в конфигурации.

    Logger.getLogger(MyClass.class).setAdditivity(false);

Мне это удалось, когда я установил его в log4j.xml

<logger name="com.stackoverflow.answers.gnat" additivity="false">
    <!-- note additivity value set above -->
    <level value="INFO"/>
    <appender-ref ref="knowledge"/>
    <appender-ref ref="reputation"/>
</logger>
1 голос
/ 19 августа 2011

Если вы сделаете свой класс Logger статическим, как предложено выше, а затем убедитесь, что вы конфигурируете log4j либо через системное свойство -D на уровне JVM, либо в конфигурации вашего приложения, у вас не должно возникнуть никаких проблем.Этот вызов для разбора конфигурации во время загрузки класса или во время создания экземпляра не требует дополнительных затрат.

log4j должен только инициализировать конфигурацию один раз - будь то при инициализации сервера или при развертывании вашего приложения.

Является ли ваш проект веб-приложением?

Кроме того, вы можете узнать больше о подключении к конфигурации журналирования WebLogic Server здесь: http://download.oracle.com/docs/cd/E12840_01/wls/docs103/logging/logging_services.html

Надеюсь, что это поможет.

0 голосов
/ 29 сентября 2012

Проблема заключается в методе BasicConfurator.configure().У меня была та же проблема в моем проекте Java, и я не использую WebLogic.

Я переместил свой BasicConfigurator.configure() метод с моего beforeTest() на beforeClass(), и внезапно проблема ушла.

@BeforeClass
public static void beforeClass() {
  BasicConfigurator.configure();
  GeoLogger.setLogLevel(Level.INFO);
}

@Before
public void beforeTest() {
  //BasicConfigurator.configure();
}

Надежда, которая поможет вам найти решение.

...