场景:SpringBoot 项目中使用了
undertow
作为 web 服务,在配置 accesslog 后发现%D
并不能获取访问耗时
刚开始的配置
server:
undertow:
url-charset: UTF-8
accesslog:
enabled: true
dir: /opt/logs
file-date-format: .yyyy-MM-dd
prefix: access
suffix: .log
pattern: '%t %a %v %r %s %b "%{i,Referer}" "%{i,User-Agent}" "%{i,X-Forwarded-For}" %D ms'
rotate: true
通过查看文档发现如果需要获取耗时,undertow 需要开启 server option 的 RECORD_REQUEST_START_TIME
网上普遍的解决方案:
就是在自动配置类里新建一个 Bean,将属性 set 进去,代码如下:
@Configuration
public class UndertowConfig {
/**
* 开启undertow计时
* @return
*/
@Bean
public UndertowServletWebServerFactory undertowServletWebServerFactory() {
UndertowServletWebServerFactory factory = new UndertowServletWebServerFactory();
factory.addBuilderCustomizers(new UndertowBuilderCustomizer() {
@Override
public void customize(Undertow.Builder builder) {
builder.setServerOption(UndertowOptions.RECORD_REQUEST_START_TIME, true);
}
});
return factory;
}
}
但这种方法总感觉很奇怪,还要重新 new 一个新的 UndertowServletWebServerFactory
, 所以我就没有采取这种做法。
感觉这种开关应该是可以通配置来解决的,通过查看源码发现确实是可以的。
通过配置开启【最优解】
通过配置文件开启 undertow
的计时:
server:
undertow:
url-charset: UTF-8
options:
server:
record-request-start-time: true #记录请求开始时间
accesslog:
enabled: true
dir: /opt/logs
file-date-format: .yyyy-MM-dd
prefix: access
suffix: .log
pattern: '%t %a %v %r %s %b "%{i,Referer}" "%{i,User-Agent}" "%{i,X-Forwarded-For}" %D ms'
rotate: true
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于