如何在log4j中格式化包含纳秒及时区信息的时间戳?
解决方案
版本兼容性确认
你当前使用的Log4j 2.11.0版本完全支持该时间格式需求,该版本开始已经原生支持微秒/纳秒级别的时间戳输出。
配置错误原因
你之前的配置存在两处问题:
- 时间精度占位符使用逻辑偏差:
n在日期格式语法中代表整秒内的纳秒总数值,而你需要的是秒后的小数位精度,应该使用S(秒的小数部分)占位符 - Log4j2默认使用毫秒级精度的时钟实现,需要手动切换为高精度时钟才能获取到微秒/纳秒级的时间数据
正确配置步骤
1. 修改Pattern布局中的时间格式
将原时间配置替换为如下内容:
%d{yyyy-MM-dd HH:mm:ss.SSSSSSXXX}
格式说明:
SSSSSS:表示输出秒后的6位小数,即微秒级精度,符合你示例中的829798部分的要求XXX:符合ISO 8601格式的时区偏移输出,即你示例中的+02:00部分
2. 启用Log4j2高精度时钟
在应用启动参数中添加如下系统属性配置,切换为纳秒级精度时钟:
-Dlog4j2.clock=org.apache.logging.log4j.core.time.SystemClock
如果是Spring Boot等框架项目,也可以在application.properties中添加配置:
system.properties.log4j2.clock=org.apache.logging.log4j.core.time.SystemClock
效果验证
配置完成后,输出的时间戳会完全符合你给出的示例格式:2021-11-30 22:21:41.829798+02:00
内容的提问来源于stack exchange,提问作者Itzhak Eretz Kdosha
相关产品推荐
相关产品推荐

