可以将log4j配置为使用Joda Time的时区数据库吗?

时间:2014-04-03 05:53:06

标签: java logging timezone log4j jodatime

我正在使用log4j(使用JDK 1.3),它的记录时间比实际时间晚一个小时。这是因为log4j正在使用JDK 1.3时区信息进行夏令时过时。

不幸的是,升级JDK以获取最新的时区信息对我来说不是一个选择。但是,在运行测试后,我可以看到JodaTime 1.6 确实具有正确的时区信息。

是否可以将log4j配置为使用JodaTime而不是JDK来计算其日期,如果是这样的话?

1 个答案:

答案 0 :(得分:1)

您可以编写自己的Appender(可能作为现有appender的包装)并配置记录器以使用新的Appender。每Javadoc

"为您自己的输出日志语句的策略实现此接口。"

方法doAppend(...)接受LoggingEvent,其long-timestamp。这个方法产生自1970-01-01T00:00:00,000Z以来的毫秒数(好吧,Log4J文档在某种程度上是蹩脚的)。然后,您自己的Appender可以将此时间戳转换为JodaTime类型,如下所示:

DateTimeZone zone = DateTimeZone.forID("..."); // specify zone for output
LoggingEvent loggingEvent = ...; // given as argument in Appender-method
DateTime dt = new DateTime(loggingEvent.getTimeStamp(), zone);
String formatted = DateTimeFormat.forPattern("...").print(dt); // specify your pattern