我希望日志应该包含特定时区的日期条目。有什么办法可以在log4j.properties
强制时区?Apache Log4j使用特定时区记录
现在我正在使用JDK 1.5,因为您已经知道JDK 1.5中的时区错误在JDK 1.5中被删除。对于JDK 1.5,默认显示“GMT”时区。我想在Log4j中配置我的特定时区。
我希望日志应该包含特定时区的日期条目。有什么办法可以在log4j.properties
强制时区?Apache Log4j使用特定时区记录
现在我正在使用JDK 1.5,因为您已经知道JDK 1.5中的时区错误在JDK 1.5中被删除。对于JDK 1.5,默认显示“GMT”时区。我想在Log4j中配置我的特定时区。
使用org.apache.log4j.helpers.DateLayout
作为布局类和其中的属性timeZone
。
在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
。
请注意,这似乎是为.NET,不知道它适用于Java - 或者至少我找不到equivilent,但我仍然看。 – 2012-10-18 19:50:28
这将让你看到你的日志的每一行时区信息:
%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”表中的行。
它总是会给我格林威治标准时间1.5,这就是为什么我想我的具体时区 – 2012-02-02 17:38:57
哦。抱歉。在这种情况下,这里是你的解决方案(需要一个额外的jar):http://stackoverflow.com/questions/1785725/specify-time-zone-of-log4js-date – 2012-02-02 17:48:47
引用'PatternLayout'的javadoc的重要部分:虽然是标准JDK的一部分,但SimpleDateFormat的性能很差。 为了获得更好的效果,建议使用log4j日期格式器。可以使用字符串“ABSOLUTE”,“DATE”和“ISO8601”中的一个指定AbsoluteTimeDateFormat,DateTimeDateFormat和ISO8601DateFormat。例如,%d {ISO8601}或%d {ABSOLUTE}。 – 2012-02-02 17:51:37
最好的方法是使用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
您可以添加以下行
log4j.appender.S.layout.ConversionPattern= %d{yyyy-MM-dd HH:mm:ss zzz}{GMT} %-5p [%t][%c:%M(%L)] %m%n
更具体的,它是如何现在看起来和你怎么想它是什么样子? – tartak 2012-02-02 16:59:24
@CatalinCiobanu现在清楚了吗? – 2012-02-02 17:03:47