Как использовать разные уровни ведения журнала для разных классов с помощью log4j2?

В документации log4j2 конфигурация java log4j2 конфигурация по умолчанию следующая:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
  <Appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </Console>
  </Appenders>
  <Loggers>
    <Root level="error">
      <AppenderRef ref="Console"/>
    </Root>
  </Loggers>
</Configuration>

Это приведет к регистрации уровней ERROR или FATAL в консоли. Моя регистрация по умолчанию работает таким же образом. Проблема, с которой я сталкиваюсь, заключается в том, что когда я это делаю:

<logger name="com.foo.Bar" level="TRACE"/>
<Root level="ERROR">
  <AppenderRef ref="STDOUT">
</Root>

Согласно документации, конфигурация java log4j2, это

исключить весь вывод TRACE из всего, кроме com.foo.Bar.

Моя реализация, с другой стороны, работает так, как если бы

<logger name="com.foo.Bar" level="TRACE"/>

там даже не было. Он по-прежнему будет распечатывать только журналы ошибок.

Вопросы

  • Кто-нибудь еще сталкивался с этой проблемой?
  • Кто-нибудь может воспроизвести?
  • Кто-нибудь знает, как это исправить? Я почти дал бы кому-то доллар. Однако я бы определенно согласился пометить их ответ зеленым.

Вот некоторая информация о моей настройке:

Зависимости Maven

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.0-beta9</version>
      </dependency>
      <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.0-beta9</version>
      </dependency>
    <dependency>

Другое

Я тестирую это в соответствующем классе. Я запускаю тестовый файл JUnit. Я использовал файл src/main .xml и файл src/test .xml. Оба заканчиваются с одинаковыми результатами.

Конечная цель

Моя конечная цель состоит в том, чтобы определенный регистратор отправлял SMTP-запросы. Я почти уверен, что знаю, как это сделать, я просто борюсь с этой небольшой проблемой


person j will    schedule 08.10.2013    source источник


Ответы (1)


Я не получил регистратор, использующий ту же строку. Как только я это сделал, это сработало:

введите здесь описание изображениявведите здесь описание изображения

Как только я сделал имена одинаковыми, моя программа работала в соответствии с указанной документацией.

person j will    schedule 08.10.2013
comment
Какое полное имя этого класса LogManager? и какую банку вы использовали здесь? - person ms_27; 23.12.2016