Log4j2如何获取真正具备纳秒精度的时间戳?
需检查的配置项如下:
- 首先检查PatternLayout的时间格式配置:默认
%d、%d{ISO8601}等格式仅输出3位毫秒精度,要显示更高精度必须手动指定小数位长度:需要微秒级精度配置为%d{yyyy-MM-dd HH:mm:ss.SSSSSS},需要纳秒级精度配置为%d{yyyy-MM-dd HH:mm:ss.SSSSSSSSS},超出平台实际精度的位数会自动补0。 - 确认你使用的Log4j2版本不低于2.11:
PreciseClock接口是2.11版本才新增的,更低版本的Log4j2会忽略该接口的实现,仅调用currentTimeMillis()方法获取毫秒级时间。 - 确认
log4j2.component.properties文件放置在类路径根目录下,且log4j2.clock配置的全限定名与你实现的NanoSecondClock完全一致,无拼写、大小写、包路径错误。 - 若你使用了异步日志特性,需要额外确认没有开启
log4j2.clock.fixed等强制使用固定时钟的配置,这类配置会覆盖自定义时钟的逻辑。 - 若你的项目基于Spring Boot等框架,框架默认的日志配置可能会覆盖自定义的component.properties配置,你可以尝试将
log4j2.clock作为启动系统属性传入,比如java -Dlog4j2.clock=my.package.NanoSecondClock -jar your-app.jar,优先级更高,确保配置生效。
内容的提问来源于stack exchange,提问作者Karsten Spang
相关产品推荐
相关产品推荐

