log4j: при конвертации даты произошла ошибка - PullRequest
6 голосов
/ 01 октября 2011

Я нашел это исключение в своих журналах:

log4j: ОШИБКА Произошла ошибка при преобразовании даты. java.lang.NullPointerException в java.lang.System.arraycopy (родной метод) в java.lang.AbstractStringBuilder.getChars (AbstractStringBuilder.java:328) в java.lang.StringBuffer.getChars (StringBuffer.java:201) в org.apache.log4j.helpers.ISO8601DateFormat.format (ISO8601DateFormat.java:130) в java.text.DateFormat.format (DateFormat.java:316) в org.apache.log4j.helpers.PatternParser $ DatePatternConverter.convert (PatternParser.java:443) в org.apache.log4j.helpers.PatternConverter.format (PatternConverter.java:65) в org.apache.log4j.PatternLayout.format (PatternLayout.java:506) в org.apache.log4j.WriterAppender.subAppend (WriterAppender.java:310) в org.apache.log4j.WriterAppender.append (WriterAppender.java:162) в org.apache.log4j.AppenderSkeleton.doAppend (AppenderSkeleton.java:251) в org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders (AppenderAttachableImpl.java:66) в org.apache.log4j.Category.callAppenders (Category.java:206) в org.apache.log4j.Category.forcedLog (Category.java:391) в org.apache.log4j.Category.info (Category.java:666) в org.obliquid.db.ConnectionManager.releaseConnection (ConnectionManager.java:313) в org.obliquid.db.ConnectionManager.finalize (ConnectionManager.java:331) в java.lang.ref.Finalizer.invokeFinalizeMethod (собственный метод) на java.lang.ref.Finalizer.runFinalizer (Finalizer.java:83) на java.lang.ref.Finalizer.access $ 100 (Finalizer.java:14) в java.lang.ref.Finalizer $ FinalizerThread.run (Finalizer.java:160)

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

#Updated at Wed Sep 14 21:57:51 CEST 2011
#Wed Sep 14 21:57:51 CEST 2011
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.rootLogger=INFO, stdout
log4j.appender.R.File=yamweb.log
log4j.appender.R.MaxFileSize=1000KB
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.MaxBackupIndex=1
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
log4j.appender.R=org.apache.log4j.RollingFileAppender

log4j.appender.stdout.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.logger.yamweb=DEBUG
log4j.logger.org.springframework=INFO
log4j.logger.org.springframework.beans=DEBUG
log4j.logger.com.amazonaws=WARN

ОБНОВЛЕНИЕ : На самом деле, глядя на PatternLayout JavaDoc , я даже не упоминаю формат даты.

d Используется для вывода даты события регистрации. За спецификатором преобразования даты может следовать спецификатор формата даты, заключенный в фигурные скобки. Например,% d {ЧЧ: мм: сс, SSS} или% d {дд МММ гггг ЧЧ: мм: сс, ССС} Если спецификатор формата даты не указан, то предполагается формат ISO8601.

Я добавил явный шаблон преобразования: %d{yyyy-MM-dd HH:mm:ss} [%t] %p %c - %m%n - просматривая журнал, и я сообщу, поможет ли он.

ОБНОВЛЕНИЕ 2 : проблема больше не возникает.

Ответы [ 3 ]

4 голосов
/ 15 декабря 2011

Кажется, это очень редкая ситуация. Поиск в поиске ошибки привел к следующему обсуждению 2006 года, связанному с разгрузкой классов:
http://comments.gmane.org/gmane.comp.jakarta.log4j.user/13835

Я посмотрел на рассматриваемый код. Если lastTimeString было как-то
не инициализируется при перезагрузке класса, тогда на
может быть NPE вызовите getChars (). Тем не менее, если не считать какой-либо сбой в ВМ или
перегрузка класса, я не вижу, как lastTimeString может быть нулевым.

РЕДАКТИРОВАТЬ: см. Вопрос выше для решения:

Я добавил явный шаблон преобразования:% d {гггг-ММ-дд ЧЧ: мм: сс} [% t]% p% c -% m% n

Похоже, это сработало и для следующего вопроса: NPE с Perf4j и Log4j .

0 голосов
/ 21 марта 2013

Я знаю, что это старый поток, но я исправил эту проблему, перезапустив сервер. Да, клише ответ, но стоит попробовать

0 голосов
/ 28 марта 2012

Я только что наткнулся на это исключение, и оно было решено удалением log4j.jar из папки с портлетами (или сервлетом, что угодно).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...