Подтвердить что ты не робот

Укажите часовой пояс даты log4j

Можно ли указать часовой пояс, который будет использовать log4j? Мне нужно, чтобы даты в файле журнала были другим часовым поясом, чем приложение. log4j PatternLayout использует SimpleDateFormat. К сожалению, не существует способа управлять часовым поясом SimpleDateFormat через строку шаблона (DateFormat имеет метод setTimeZone, но это не помогает).

Я посмотрел на источник log4j и SimpleDateFormat инициализируется в PatternParser.finalizeConverter. К сожалению, нет простого способа установить DateFormat для установки часового пояса.

4b9b3361

Ответ 1

Если вы используете файл JAR файла Log4J extras в вашем пути к классам, класс EnhancedPatternLayout поддерживает эту конфигурацию. См. Javadoc в эту ссылку. Он обрабатывается как часть компонента шаблона% d следующим образом:

log4j.appender.stdout.layout.ConversionPattern=%d{}{America/New_York} %p [%c] - %m%n

Вы можете скачать пакет дополнительных услуг здесь.

Ответ 2

Мой случай... должен изменить patternLayout на EnhancedPatternLayout. (Log4j-1.2.17.jar)

log4j.appender.logfile.layout = org.apache.log4j. EnhancedPatternLayout log4j.appender.logfile.layout.ConversionPattern = [% d {ISO8601} {GMT + 9}]% - 5p -% m% n

Ответ 3

Шаблон журнала выше имеет правильную идею, но не полностью корректен (вы не получаете отметки времени в журнале).
Используйте этот шаблон точно:
%d{ISO8601}{America/New_York} %p [%c] - %m%n
или
%d{ISO8601}{GMT-5} %p [%c] - %m%n

Ответ 4

Предпочтительно использовать что-то вроде {America/New_York}, а не {GMT-5}, потому что, указав часовой пояс, автоматическая настройка будет сделана, если с летней экономией будет работать. Указание чего-то типа GMT-5 будет просто регулировать часовой пояс GMT на указанное количество часов.

Ответ 5

Также, если вы хотите, чтобы 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);
}