Apache Log4j Logging with specific timezone

2019-04-05 13:59发布

I want the log should contain date entries of specific timezone. Is there any way of forcing timezone in log4j.properties?

Now I am using JDK 1.5, As you already know that there is timezone bug in JDK 1.5 that is removed in JDK 1.5. In case of JDK 1.5 it by default shows "GMT" timezone. I want to configure in Log4j my specific timezone.

6条回答
甜甜的少女心
2楼-- · 2019-04-05 14:04

The best way is to use the Apache Extras™ for Apache log4j™ And replace The normal PatternLayout by org.apache.log4j.EnhancedPatternLayout doing the following if using a property file:

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

Then you can use %d{ISO8601}{GMT} instead of %d in the ConversionPattern to display your date in the GMT format. Any timezone can be specified instead of GMT

查看更多
对你真心纯属浪费
3楼-- · 2019-04-05 14:04

Include a date argument in your ConversionPattern. From the PatternLayout documentation:

date -

Used to output the date of the logging event in the local time zone. To output the date in universal time use the %utcdate pattern. The date conversion specifier may be followed by a date format specifier enclosed between braces. For example, %date{HH:mm:ss,fff} or %date{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is given then ISO8601 format is assumed (Iso8601DateFormatter).

The date format specifier admits the same syntax as the time pattern string of the ToString.

For better results it is recommended to use the log4net date formatters. These can be specified using one of the strings "ABSOLUTE", "DATE" and "ISO8601" for specifying AbsoluteTimeDateFormatter, DateTimeDateFormatter and respectively Iso8601DateFormatter. For example, %date{ISO8601} or %date{ABSOLUTE}.

These dedicated date formatters perform significantly better than ToString.

查看更多
对你真心纯属浪费
4楼-- · 2019-04-05 14:04

You can add following line

log4j.appender.S.layout.ConversionPattern= %d{yyyy-MM-dd HH:mm:ss zzz}{GMT} %-5p [%t][%c:%M(%L)] %m%n
查看更多
我只想做你的唯一
5楼-- · 2019-04-05 14:09

There are three steps to this:

1) Add the log4j-extras dependency here

2) Set the layout to EnhancedPatternLayout: log4j.appender.stdout.layout=org.apache.log4j.EnhancedPatternLayout (change stdout to whatever appender you are using)

3) Add your timezone in braces after your date time pattern log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}{IST} %-5p %c{1}:%L - %m%n (Here IST in my case)

You can refer to list of timezone ID's available in java here or here

查看更多
smile是对你的礼貌
6楼-- · 2019-04-05 14:20

This will allow you to see timezone information in each line of your logs:

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

The trick is to include 'zzz' in the pattern since according to Javadoc for java.text.SimpleDateFormat ( http://docs.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html ), that's the code for timezone. Log4J uses the same rules as SimpleDateFormat.

There are more details over the in the Log4J Javadoc:

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

Look for the row in the table where the 'Conversion Character' is the letter 'd'.

查看更多
Evening l夕情丶
7楼-- · 2019-04-05 14:23

Use the org.apache.log4j.helpers.DateLayout as the layout class and the property timeZone in it.

查看更多
登录 后发表回答