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

标签 java logging timezone log4j jodatime

我正在使用 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/

相关文章:

java - hibernate 日志记录

MySQL IF 时间转换

java - 如何制作日期格式以将字符串日期解析为指定的时区

windows - 使用 Pytz 更改系统时区

java - 是什么让连接可重用

java - 如何允许并发读取,但在 Java 对象写入期间阻止所有访问?

java - 面向对象的类接口(interface)

java - 如何在 Java 中使用 RESTful Web 服务获取远程/客户端 IP 地址?

java - 用 Java 写入文件 : Cannot find the path specified

c - 输出错误重定向(关于stderr)