如何在JBoss/WildFly日志Pattern Formatter中自定义微秒级时间戳
解决WildFly日志微秒级时间戳配置问题
问题根源
WildFly默认使用java.util.Date处理日志时间戳,该类仅支持毫秒级精度。即使在日志格式中指定SSSSSS,后面的微秒位也只是基于毫秒值补零生成的假数据,并非真实的微秒时间。
有效配置方案(同时支持JBoss日志管理器和Undertow)
1. 配置JBoss日志管理器的Pattern Formatter
需要启用use-java-time属性,让日志管理器使用java.time系列API(原生支持微秒/纳秒精度),同时指定包含微秒的日期格式:
执行以下CLI命令:
# 启用java.time高精度时间支持 /subsystem=logging/pattern-formatter=COLOR-PATTERN:write-attribute(name=use-java-time, value=true) # 设置包含微秒的日志输出格式 /subsystem=logging/pattern-formatter=COLOR-PATTERN:write-attribute(name=pattern, value="%d{yyyy-MM-dd HH:mm:ss.SSSSSS} %-5p [%c] (%t) %s%e%n")
2. 配置Undertow访问日志的微秒时间戳
Undertow访问日志默认独立配置,需修改其规则以支持高精度时间:
方式一:直接修改访问日志格式
执行以下CLI命令(以默认access-log为例):
# 为Undertow访问日志启用java.time支持 /subsystem=undertow/server=default-server/host=default-host/access-log=default:write-attribute(name=use-java-time, value=true) # 设置包含微秒的访问日志格式 /subsystem=undertow/server=default-server/host=default-host/access-log=default:write-attribute(name=pattern, value="%d{yyyy-MM-dd HH:mm:ss.SSSSSS} %h %l %u \"%r\" %s %b \"%{Referer}i\" \"%{User-Agent}i\"")
方式二:复用日志管理器的Formatter
如果希望Undertow访问日志复用已配置好的COLOR-PATTERN格式,可执行:
/subsystem=undertow/server=default-server/host=default-host/access-log=default:write-attribute(name=formatter, value=COLOR-PATTERN)
验证结果
配置完成后重启WildFly,日志将输出真实的微秒级时间戳,示例如下:
2025-09-09 11:24:10.123456 INFO [org.wildfly.extension.undertow] (MSC service thread 1-8) WFLYUT0012: Started server default-server. 2025-09-09 11:25:11.789012 INFO [io.undertow.accesslog] (default I/O-22) - - 127.0.0.1 "GET / HTTP/2.0" 200 19 "http://example.com" "kube-probe/1.21"
注意事项
- 该方案要求WildFly版本≥26,因为从这个版本开始,JBoss Log Manager正式支持
use-java-time属性。 - 确保操作系统和JVM支持高精度时钟(现代系统默认已支持)。
内容的提问来源于stack exchange,提问作者Deepak Rawte
相关产品推荐
相关产品推荐

