SpringBoot undertow accesslog格式

关于SpringBoot undertowaccesslog的格式

1.背景

1.收集accesslog日志。
2.项目使用SpringBoot的undertow
3.日志格式有特殊要求。

2.问题原因

关于寻找日志格式的路上,花费了不少时间,其中,在各种博客上、SpringBoot官网上和Apache Access Logging标准。
都没有找到undertow配置的相关答案。大部分博客都是把官网的说明直接翻译了一下。

而容器undertowtomcat的配置是有一定的差别的。照搬Tomcat的日志配置是不行的,如下。

pattern: '%a - - %t "%m %U" %s %{content-length}o "%U" "%{User-Agent}i" "%A" "%b" "%T"'

会报如下错误:

2020-09-10 09:35:46.239 ERROR 13112 --- [main] io.undertow: UT005017: Unknown variable %{content-length}. For the literal percent character use two percent characters: '%'
2020-09-10 09:35:46.239 ERROR 13112 --- [main] io.undertow: UT005017: Unknown variable %{User-Agent}. For the literal percent character use two percent characters: '%'

3.解决方案

在一筹莫展之际,我突然想起,虽然官网的说明可能是简写,但是源码是不会简写的。所以,我找到了SpringBoot的源码包io.undertow.attribute,打开其中一个ResponseResponseHeaderAttribute。看到如下代码,瞬间明白了写法。
SpringBoot undertow accesslog格式_第1张图片

Tomcat中的写法是%{User-Agent}i

而通过undertow的源码得知,其的写法为%{i,User-Agent}

至此,问题解决。分享下我的日志格式。

pattern: '%a - - %t "%m %U" %s %{o,content-length} "%{i,User-Agent}" "%A" "%b" "%T"'

输出日志

0:0:0:0:0:0:0:1 - - [10/Sep/2020:09:27:19 +0800] "POST /user/get" 200 - "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36" "0:0:0:0:0:0:0:1" "64" "-"

Undertow官网说明

你可能感兴趣的:(#,SpringBoot,spring,boot,undertow,accesslog,accesslog格式)