我正在使用 log4j(带有 JDK 1.3),它的记录时间比实际时间晚一小时。这是因为 log4j 使用 JDK 1.3 时区信息进行夏令时,该信息已经过时。
不幸的是,升级 JDK 来获取最新的时区信息对我来说不是一个选择。但是,运行测试后,我可以看到 JodaTime 1.6 确实具有正确的时区信息。
是否可以将 log4j 配置为使用 JodaTime 而不是 JDK 来计算其日期?如果可以,如何实现?
最佳答案
您可以编写自己的Appender
(可能作为现有附加程序的包装器)并配置记录器以使用新的Appender
。每Javadoc :
“为您自己的日志语句输出策略实现此接口(interface)。”
方法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
关于java - log4j 可以配置为使用 Joda Time 的时区数据库吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22828922/