2012-02-02 2 views
8

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

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

+1

быть более конкретным, как это выглядит сейчас, и как вы хотите выглядеть? – tartak

+0

@CatalinCiobanu Теперь ясно? –

ответ

0

Использовать org.apache.log4j.helpers.DateLayout в качестве класса макета и имущества timeZone в нем.

0

Включите аргумент date в ваш ConversionPattern. С датыPatternLayout documentation:

-

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

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

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

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

+2

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

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.

Есть больше информации через в Javadoc Log4J:

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

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

+0

это всегда даст мне GMT ​​в jdk 1.5, вот почему я хочу свой часовой пояс –

+0

Oh. Сожалею. В этом случае вот ваше решение (требуется банда «Дополнительные»): http://stackoverflow.com/questions/1785725/specify-time-zone-of-log4js-date –

+0

Цитирование важной части javadoc 'PatternLayout' : Хотя часть стандартного JDK, производительность SimpleDateFormat довольно бедна. Для получения лучших результатов рекомендуется использовать форматы даты log4j. Они могут быть указаны с использованием одной из строк «ABSOLUTE», «DATE» и «ISO8601» для указания AbsoluteTimeDateFormat, DateTimeDateFormat и соответственно ISO8601DateFormat. Например,% d {ISO8601} или% d {АБСОЛЮТ}. –

4

Лучшим способом является использование Apache Extras™ for 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

1

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

log4j.appender.S.layout.ConversionPattern= %d{yyyy-MM-dd HH:mm:ss zzz}{GMT} %-5p [%t][%c:%M(%L)] %m%n 
Смежные вопросы