log4j проблема с часовым поясом - PullRequest
1 голос
/ 10 июля 2010

У меня есть веб-приложение, которое при запуске сохраняет локальный часовой пояс сервера в глобальном статическом члене, а затем устанавливает для DefaultTimeZone JVM значение GMT.

Во время запуска log4j регистрирует сообщения в часовом поясе по умолчанию на сервере.

Теперь, когда я изменяю свой уровень журнала в log4j.properties, уровень журнала изменяется динамически, и теперь log4j регистрирует сообщения во время по Гринвичу.

Мое требование - регистрировать сообщения всегда в локальном часовом поясе сервера.

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

Спасибо

Ответы [ 3 ]

3 голосов
/ 10 июля 2010

Теперь, когда я изменяю свой уровень журнала в log4j.properties, уровень журнала изменяется динамически

Это означает, что вы настроили log4j для просмотра файла конфигурации на предмет изменений, конфигурация которого не рекомендуется для веб-приложений (см. Также этот связанный вопрос SO ).

Происходит что-то вроде этого

  1. Ваше приложение запускается, log4j инициализируется, TimeZone.getDefault() возвращает часовой пояс машины
  2. Вы меняете часовой пояс по умолчанию для всей JVM
  3. Вы вносите изменения в конфигурацию log4j, поток наблюдателя log4j замечает это изменение, повторно инициализирует иерархию регистратора, видит новый часовой пояс по умолчанию

Я бы предложил здесь несколько вариантов:

  • Не использовать configureAndWatch в среде сервлета
  • Не изменяйте стандартную JVM TimeZone по умолчанию, так как это может повлиять на множество несвязанных компонентов (таких как log4j, как вы видели). Вместо этого, если у вас есть код, требующий вывода дат в GMT, убедитесь, что весь код проходит по одному и тому же пути кода, чтобы получить зону по умолчанию, которую вы хотите использовать, например, убедитесь, что все ваши вызовы кода, связанные со временем что-то вроде TimeZone getMyAppDefaultTimeZone().

Изменение значений по умолчанию для JVM для чего-то, что только для кода вашего приложения может иметь гораздо большие непредвиденные последствия.

0 голосов
/ 27 октября 2010

Если вы используете log4cxx 0.9.7 , то часовой пояс по умолчанию будет GMT.Получите часовой пояс сервера и добавьте следующую строку в конфигурацию для печати журналов в часовом поясе HK (GMT + 8: 00)

log4j.appender.R.layout.TimeZone=GMT-8:00
0 голосов
/ 10 июля 2010

Получите исходный код для версии log4j, которую вы используете, и исследуйте Appender, который вы используете, чтобы найти, где генерируется отметка времени, которую вы видите. Затем выясните, какой код вам действительно нужно сделать в этом месте, а затем обновите свой вопрос.

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