Вопрос по timezone, java, log4j – Apache Log4j Logging с определенным часовым поясом

10

Я хочу, чтобы журнал должен содержать записи даты определенного часового пояса. Есть ли способ заставить часовой пояс вlog4j.properties?

Сейчас я использую JDK 1.5, поскольку вы уже знаете, что в JDK 1.5 есть ошибка часового пояса, которая удалена в JDK 1.5. В случае JDK 1.5 по умолчанию отображается часовой пояс GMT. Я хочу настроить в Log4j мой конкретный часовой пояс.

@CatalinCiobanu Теперь понятно? Sunny Gupta
быть более конкретным, как это выглядит сейчас и как вы хотите, чтобы это выглядело? tartak

Ваш Ответ

6   ответов
0

Вы можете добавить следующую строку

log4j.appender.S.layout.ConversionPattern= %d{yyyy-MM-dd HH:mm:ss zzz}{GMT} %-5p [%t][%c:%M(%L)] %m%n
Пробовал с log4j2, не работает. Jingguo Yao
4

Лучший способ - использоватьApache Extras ™ для Apache log4j ™ И замените Normal PatternLayout на org.apache.log4j.EnhancedPatternLayout, выполнив следующее при использовании файла свойств:

//log4j.appender.xxx.layout = org.apache.log4j.PatternLayout
//Replaced by
log4j.appender.xxx.layout = org.apache.log4j.EnhancedPatternLayout

Затем вы можете использовать% d {ISO8601} {GMT} вместо% d в ConversionPattern для отображения вашей даты в формате GMT. Любой часовой пояс может быть указан вместо GMT

2

1) Добавитьlog4j-extras зависимостьВот

2) Установите макет в EnhancedPatternLayout:log4j.appender.stdout.layout=org.apache.log4j.EnhancedPatternLayout (менятьstdout с любым приложением, которое вы используете)

3) Добавьте ваш часовой пояс в фигурные скобки после даты и времениlog4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}{IST} %-5p %c{1}:%L - %m%n (Вот IST в моем случае)

Вы можете обратиться к списку идентификаторов часовых поясов, доступных в JavaВот или жеВот

0

org.apache.log4j.helpers.DateLayout как класс макета и свойствоtimeZone в этом.

16

его журнала:

%d{yyyy-MM-dd/HH:mm:ss.SSS/zzz}

Хитрость заключается в том, чтобы включить 'zzz' в шаблон, поскольку в соответствии с Javadoc для java.text.SimpleDateFormat (http://docs.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html ), это код для часового пояса. Log4J использует те же правила, что и SimpleDateFormat.

В Log4J Javadoc есть более подробная информация:

http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html

Найдите строку в таблице, где «символом преобразования» является буква «d».

Да, но под «довольно плохим» они подразумевают, что он может делать 10000 форматов в секунду. Честно говоря, если это представляет собой серьезное ограничение производительности вашего приложения, то вы заслуживаете бокал шампанского. Julius Musseau
он всегда будет давать мне GMT в jdk 1.5, поэтому я хочу, чтобы мой конкретный часовой пояс Sunny Gupta
@JuliusDavies, используя дополнительные jar Я не получаю никакой даты в регистраторе. Пожалуйста, предложите Sunny Gupta
Ой. Сожалею. В этом случае вот ваше решение (нужен фляга "extras"):stackoverflow.com/questions/1785725/... Julius Musseau
Цитируя важную частьPatternLayoutJavadoc: Хотя часть стандартного JDK, производительность SimpleDateFormat довольно низкая. Для лучшего результата рекомендуется использовать форматеры даты log4j. Они могут быть указаны с использованием одной из строк «ABSOLUTE», «DATE» и «ISO8601» для указания AbsoluteTimeDateFormat, DateTimeDateFormat и соответственно ISO8601DateFormat. Например,% d {ISO8601} или% d {ABSOLUTE}. Alex Nikolaenkov
0

date аргумент в вашемConversionPattern, ИзPatternLayout документация:

свидание -

Используется для вывода даты события регистрации в местном часовом поясе. Для вывода даты в универсальном времени используйте%utcdate шаблон. За спецификатором преобразования даты может следовать спецификатор формата даты, заключенный в фигурные скобки. Например,%date{HH:mm:ss,fff} или же%date{dd MMM yyyy HH:mm:ss,fff}, Если спецификатор формата даты не указан, то предполагается формат ISO8601 (Iso8601DateFormatter).

Спецификатор формата даты допускает тот же синтаксис, что и строка шаблона времениToString.

Для лучших результатов рекомендуется использовать форматеры даты log4net. Их можно указать, используя одну из строк «ABSOLUTE», «DATE» и «ISO8601» для указанияAbsoluteTimeDateFormatter, DateTimeDateFormatter и соответственноIso8601DateFormatter, Например,%date{ISO8601} или же%date{ABSOLUTE}.

Эти специальные средства форматирования даты работают значительно лучше, чемToString.

Обратите внимание, что это похоже на .net, не уверен, что это применимо к Java - или, по крайней мере, я не могу найти эквивалент, я все еще ищу. Bill K

Похожие вопросы