我正在使用log4j(使用JDK 1.3),它的记录时间比实际时间晚一个小时。这是因为log4j正在使用JDK 1.3时区信息进行夏令时过时。
不幸的是,升级JDK以获取最新的时区信息对我来说不是一个选择。但是,在运行测试后,我可以看到JodaTime 1.6 确实具有正确的时区信息。
是否可以将log4j配置为使用JodaTime而不是JDK来计算其日期,如果是这样的话?
答案 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