2012-02-02 42 views
8

我希望日志应该包含特定时区的日期条目。有什么办法可以在log4j.properties强制时区?Apache Log4j使用特定时区记录

现在我正在使用JDK 1.5,因为您已经知道JDK 1.5中的时区错误在JDK 1.5中被删除。对于JDK 1.5,默认显示“GMT”时区。我想在Log4j中配置我的特定时区。

+1

更具体的,它是如何现在看起来和你怎么想它是什么样子? – tartak 2012-02-02 16:59:24

+0

@CatalinCiobanu现在清楚了吗? – 2012-02-02 17:03:47

回答

0

使用org.apache.log4j.helpers.DateLayout作为布局类和其中的属性timeZone

0

ConversionPattern中包含date参数。从PatternLayout documentation:

日期 -

用于输出日志事件的日期在本地时区。 要通用时间输出日期,请使用%utcdate模式。日期转换说明符后面可以跟着大括号之间的日期格式说明符 。例如,%date{HH:mm:ss,fff}%date{dd MMM yyyy HH:mm:ss,fff}。如果没有给出日期格式说明符,则假定为 ISO8601格式(Iso8601DateFormatter)。

日期格式说明符承认与ToString的时间模式 字符串相同的语法。

为了获得更好的结果,建议使用log4net日期 格式化程序。这些可以使用指定 AbsoluteTimeDateFormatter,DateTimeDateFormatter和012-Iso8601DateFormatter的字符串 “ABSOLUTE”,“DATE”和“ISO8601”中的一个来指定。例如,%date{ISO8601}%date{ABSOLUTE}

这些专用日期格式化器的性能明显优于 ToString

+2

请注意,这似乎是为.NET,不知道它适用于Java - 或者至少我找不到equivilent,但我仍然看。 – 2012-10-18 19:50:28

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”表中的行。

+0

它总是会给我格林威治标准时间1.5,这就是为什么我想我的具体时区 – 2012-02-02 17:38:57

+0

哦。抱歉。在这种情况下,这里是你的解决方案(需要一个额外的jar):http://stackoverflow.com/questions/1785725/specify-time-zone-of-log4js-date – 2012-02-02 17:48:47

+0

引用'PatternLayout'的javadoc的重要部分:虽然是标准JDK的一部分,但SimpleDateFormat的性能很差。 为了获得更好的效果,建议使用log4j日期格式器。可以使用字符串“ABSOLUTE”,“DATE”和“ISO8601”中的一个指定AbsoluteTimeDateFormat,DateTimeDateFormat和ISO8601DateFormat。例如,%d {ISO8601}或%d {ABSOLUTE}。 – 2012-02-02 17:51:37

4

最好的方法是使用Apache Extras™ for Apache log4j™ 并用org.apache.log4j替换正常的PatternLayout。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