Вопрос

Можно ли указать часовой пояс, который будет использовать 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);
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top