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

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

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

5 ответов


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

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

вы можете скачать пакет дополнений здесь.


Моем Случае... необходимо изменить patternLayout на EnhancedPatternLayout. (к log4j-1.2.17.jar)

настройки log4j.приемщика.файл журнала.layout=org.апаш.к log4j.EnhancedPatternLayout к log4j.приемщика.файл журнала.макет.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{}{"+defaultTimeZoneId+"}");

    super.setConversionPattern(conversionPatternModif);
}