Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:
null
. null
. null
, как если бы это был массив. null
, как если бы это был массив. null
как будто это было значение Throwable. Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null
.
Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html
Запустите свою программу с-Dlog4j.debug так, чтобы стандарт получил информацию о том, как log4j настроен - я подозревал, что это не настроено способ, которым Вы думаете, что это.
Для прибавления к тому, что James A. N. Stauffer и cynicalman сказали - я буду держать пари, что существует другой log4j.xml / log4j.properties на пути к классу кроме того, который Вы хотите использоваться, который заставляет log4j настраивать себя способ, которым это.
-Dlog4j.debug
абсолютный уничтожитель способ диагностировать любые проблемы log4j.
Две вещи: Проверьте аддитивность и решите, хотите ли Вы, чтобы события журнала, полученные более подробными уровнями входа, распространили к корневому регистратору.
, Во-вторых, проверьте уровень на корневой регистратор. Кроме того, можно также добавить фильтрацию на самом appender, но это не должно обычно быть необходимо.
Если Вы будете использовать log4j.properties
файл, то этот файл, как обычно ожидают, будет в корне Вашего пути к классу, поэтому удостоверьтесь, что это там.
Это правильное поведение. Корневой логгер - это поведение по умолчанию. Поэтому, если вы не укажете никакой логгер, он примет уровень корневого логгера за уровень по умолчанию, но это не означает, что уровень корневого логгера является уровнем для всех ваших логов.
Любой ваш код, который ведет журнал, используя журнал 'TraceLogger' или 'org.springframework.ws.server.endpoint.interceptor', будет регистрировать сообщения, используя уровень TRACE и DEBUG соответственно, любой другой код будет использовать root logger для регистрации сообщений, используя уровень, который в вашем случае является ERROR.
Таким образом, если вы используете логгер, отличный от root, уровень лога root будет заменен уровнем лога этого логгера. Чтобы получить желаемый результат, измените два других уровня журнала на ERROR.
Надеюсь, это будет полезно.
Корневой регистратор находится на вершине иерархии регистратора.Он является исключительным по трем причинам:
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
Надеюсь, это поможет.