更改 Wildfly(JBoss) 访问日志中的日期格式

Change date format in Wildfly(JBoss) access log

access_log 在 wildfly 中记录具有以下预定义日期格式的条目,该格式由 %t 生成:

[22/Oct/2019:14:28:36 +0300]

但是,我想将其更改为如下所示:

[22/10/2019 14:28:36.345]

我已尝试更改独立 xml 文件中的模式,如下所示:

<access-log pattern="%{dd/MMM/yyyy:HH:mm:ss Z}t %t %h %l %u &quot;%r&quot;s %s %b &quot;%{i,Referer}&quot; &quot;%{i,User-Agent}&quot;"/>                       

但是,记录的是以下内容:

%{dd/MMM/yyyy:HH:mm:ss Z}t [22/Oct/2019:14:28:36 +0300] 127.0.0.1 - - "GET /favicon.ico HTTP/1.1"s 302 - "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36"

如何正确设置日期格式?

我用的是wildfly-10.1.0。 我也试过下面的格式,可用于 apache 访问日志: 但是没有成功。

还有其他类似的问题online,但没有得到回答。

访问日志配置中使用的模式非常有限,只能识别 these variables,据我所知,日期格式无法自定义。

但是,您应该能够通过将日志记录委托给接受更复杂格式的日志记录子系统来获得所需的日期格式:

在 undertow 子系统配置中,从模式中删除日期并添加 use-server-log 属性:

<access-log pattern="%t %h %l %u &quot;%r&quot;s %s %b &quot;%{i,Referer}&quot; &quot;%{i,User-Agent}&quot;" use-server-log="true"/>

在日志子系统中,定义一个记录器,它将捕获您的访问日志,并使用一个格式化程序定义一个关联的处理程序,该处理程序将以所需的日期格式显示日志:

<periodic-rotating-file-handler name="ACCESS" autoflush="true">
    <formatter>
        <named-formatter name="%d{dd/MMM/yyyy:HH:mm:ss Z} %s"/>
    </formatter>
    <file relative-to="jboss.server.log.dir" path="access.log"/>
    <suffix value=".yyyy-MM-dd"/>
    <append value="true"/>
</periodic-rotating-file-handler>
[...]
<logger category="io.undertow.accesslog" use-parent-handlers="false">
    <handlers>
        <handler name="ACCESS"/>
    </handlers>
</logger>

我的回答主要基于 this other answer,其中详细说明了如何设置访问日志轮换。

经过大量排查,我终于找到了答案,这可能对其他人也有帮助:

它是通过在格式化程序中添加单词 'time' 作为另一个参数。如下:

<access-log pattern="[%{time,dd/MM/yyyy HH:mm:ss.SSS}] %h %l %u &quot;%r&quot; %s %b &quot;%{i,Referer}&quot; &quot;%{i,User-Agent}&quot;"/>