Укажите часовой пояс даты log4j
Вопрос
Можно ли указать часовой пояс, который будет использовать log4j? Мне нужны даты в файле журнала, чтобы быть другим часовым поясом, чем приложения. log4j's PatternLayout
Использование SimpleDateFormat
. Анкет К сожалению, нет способа контролировать SimpleDateFormat
часовой пояс через строку шаблона (DateFormat
имеет setTimeZone
Метод, но это не помогает).
Я посмотрел на источник log4j и SimpleDateFormat
Используется в PatternParser.finalizeConverter
. Анкет К сожалению, нет простого способа получить DateFormat
Чтобы установить часовой пояс.
Решение
Если вы используете файл JAR Log4J Avtras на своем классе, класс EnhancedPatterNlayout поддерживает эту опцию конфигурации. Увидеть Javadoc в эта ссылка. Анкет Он обрабатывается как часть компонента %D, подобного этому:
log4j.appender.stdout.layout.ConversionPattern=%d{}{America/New_York} %p [%c] - %m%n
Вы можете скачать пакет Extras здесь.
Другие советы
Мой случай ... должен изменить PatternLayout на EnhancedPatternlayout. (log4j-1.2.17.jar)
log4j.appender.logfile.layout = org.apache.log4j.EnhancedPatternlayoutlog4j.appender.logfile.layout.conversionpattern = [%d {iso8601} {gmt+9}]% - 5p -%m%n
У шаблона журнала выше есть правильная идея, но не в полной мере (вы не получаете никакой метки времени в журнале).
Наверняка используйте этот шаблон:
%d{ISO8601}{America/New_York} %p [%c] - %m%n
или же
%d{ISO8601}{GMT-5} %p [%c] - %m%n
Предпочтительно использовать что-то вроде {America/new_york}, а не {GMT-5}, потому что, указав часовой пояс, будет выполнена автоматическая корректировка, если дневная экономия будет выполнена. Указание чего-то вроде GMT-5 просто отрегулирует часовой пояс GMT на указанное количество часов.
Кроме того, если вы хотите Dinamicaly obtein часовой пояс по умолчанию, вы можете расширить EnhancedPatternlayout и перезаписать метод «setConversionPattern», как это:
@Override
public void setConversionPattern(String conversionPattern) {
String defaultTimeZoneId = TimeZone.getDefault().getID();
String conversionPatternModif = conversionPattern.replaceAll(
"\\%d\\{([^\\{\\}]*)\\}([ ]*[^\\{]*)",
"%d{$1}{"+defaultTimeZoneId+"}$2");
super.setConversionPattern(conversionPatternModif);
}