проблема log4j с часовым поясом

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

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

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

Мое требование состоит в том, чтобы всегда регистрировать сообщения в зоне местного времени сервера.

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

Спасибо

1
задан jch 10 July 2010 в 06:37
поделиться

2 ответа

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

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

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

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

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

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

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

3
ответ дан 2 September 2019 в 23:08
поделиться

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

0
ответ дан 2 September 2019 в 23:08
поделиться
Другие вопросы по тегам:

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