Log4j: Почему корневой регистратор собирает все типы журнала независимо конфигурация?

Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  1. Вызов метода экземпляра объекта null.
  2. Доступ или изменение поля объекта null.
  3. Принимая длину null, как если бы это был массив.
  4. Доступ или изменение слотов null, как если бы это был массив.
  5. Бросок null как будто это было значение Throwable.

Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null.

Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html

40
задан Betlista 4 December 2012 в 09:24
поделиться

6 ответов

Запустите свою программу с-Dlog4j.debug так, чтобы стандарт получил информацию о том, как log4j настроен - я подозревал, что это не настроено способ, которым Вы думаете, что это.

8
ответ дан James A. N. Stauffer 27 November 2019 в 01:22
поделиться

Для прибавления к тому, что James A. N. Stauffer и cynicalman сказали - я буду держать пари, что существует другой log4j.xml / log4j.properties на пути к классу кроме того, который Вы хотите использоваться, который заставляет log4j настраивать себя способ, которым это.

-Dlog4j.debug абсолютный уничтожитель способ диагностировать любые проблемы log4j.

6
ответ дан matt b 27 November 2019 в 01:22
поделиться

Две вещи: Проверьте аддитивность и решите, хотите ли Вы, чтобы события журнала, полученные более подробными уровнями входа, распространили к корневому регистратору.

, Во-вторых, проверьте уровень на корневой регистратор. Кроме того, можно также добавить фильтрацию на самом appender, но это не должно обычно быть необходимо.

5
ответ дан Asgeir S. Nilsen 27 November 2019 в 01:22
поделиться

Если Вы будете использовать log4j.properties файл, то этот файл, как обычно ожидают, будет в корне Вашего пути к классу, поэтому удостоверьтесь, что это там.

2
ответ дан Michael 27 November 2019 в 01:22
поделиться

Это правильное поведение. Корневой логгер - это поведение по умолчанию. Поэтому, если вы не укажете никакой логгер, он примет уровень корневого логгера за уровень по умолчанию, но это не означает, что уровень корневого логгера является уровнем для всех ваших логов.

Любой ваш код, который ведет журнал, используя журнал 'TraceLogger' или 'org.springframework.ws.server.endpoint.interceptor', будет регистрировать сообщения, используя уровень TRACE и DEBUG соответственно, любой другой код будет использовать root logger для регистрации сообщений, используя уровень, который в вашем случае является ERROR.

Таким образом, если вы используете логгер, отличный от root, уровень лога root будет заменен уровнем лога этого логгера. Чтобы получить желаемый результат, измените два других уровня журнала на ERROR.

Надеюсь, это будет полезно.

0
ответ дан 27 November 2019 в 01:22
поделиться

Корневой регистратор находится на вершине иерархии регистратора.Он является исключительным по трем причинам:

  • он всегда существует,
  • его уровень не может быть установлен равным нулю;
  • он не может быть получен по имени.

rootLogger является отцом всех приложений. Каждый включенный запрос на ведение журнала для данного регистратора будет переадресован всем добавляющим элементам в этом регистраторе, а также приложениям более высокого уровня в иерархии (включая rootLogger)

Например, если приложение console добавлено в корневого регистратора , тогда все разрешенные запросы регистрации будут как минимум напечатаны на консоли. Если в дополнение к регистратору добавлен файл-аппендер, скажем L ​​, то разрешенные запросы на ведение журнала для дочерних элементов L и L будут печататься в файле и на консоли . Можно переопределить это поведение по умолчанию, чтобы накопление приложений больше не было аддитивным , установив для флага аддитивности значение false .

Из руководства log4j

Подводя итог:

Если вы не хотите распространять событие регистрации на родительские регистраторы (скажем, rootLogger), тогда добавьте флаг аддитивности в false в этих регистраторах. В вашем случае:

<logger name="org.springframework.ws.server.endpoint.interceptor"
        additivity="false">
        <level value="DEBUG" />
        <appender-ref ref="payloadAppender" />
</logger>

В стандартном стиле конфигурации log4j (который я предпочитаю XML):

log4j.logger.org.springframework.ws.server.endpoint.interceptor = INFO, payloadAppender
log4j.additivity.org.springframework.ws.server.endpoint.interceptor = false

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

74
ответ дан 27 November 2019 в 01:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: