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

Posted

技术标签:

【中文标题】更改 Wildfly(JBoss) 访问日志中的日期格式【英文标题】:Change date format in Wildfly(JBoss) access log 【发布时间】:2020-02-18 13:10:27 【问题描述】:

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

[2019 年 10 月 22 日:14:28:36 +0300]

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

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

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

<access-log pattern="%dd/MMM/yyyy:HH:mm:ss Zt %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 Zt [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,但没有得到解答。

【问题讨论】:

【参考方案1】:

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

这是通过在格式化程序中添加单词“时间”作为另一个参数。如下:

<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;"/>

【讨论】:

【参考方案2】:

访问日志配置中使用的模式非常有限,仅识别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="%ddd/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,其中详细说明了如何设置访问日志轮换。

【讨论】:

谢谢@Aaron。 “据我所知,日期格式不可自定义”。幸运的是有办法。请在下面查看我的回复。 @PhilipDylan 很好,很高兴看到我弄错了!你应该接受你自己的答案。

以上是关于更改 Wildfly(JBoss) 访问日志中的日期格式的主要内容,如果未能解决你的问题,请参考以下文章

jboss wildfly 外网访问

将 Undertow access.log 写入 Wildfly 中的非默认位置

Spring boot 和 JBoss 8 Wildfly 日志配置应用

在 Wildfly 8.2 中配置日志的正确方法

JBoss Wildfly 9,JNDI 异常

使用 jboss/wildfly 10 进行 SLF4J 日志记录