Укажите часовой пояс даты 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);
}