首页 > 解决方案 > Spring Boot Jetty 访问日志:记录服务器延迟时间

问题描述

我正在使用嵌入式(默认方式)码头服务器进行春季启动。我正在尝试通过以下方式配置码头服务器的访问日志

我正在使用 spring-boot-starter-jetty', version: '2.3.2.RELEASE' 和 spring boot 是相同的版本。

server.jetty.accesslog.append=false
server.jetty.accesslog.date-format=dd/MMM/yyyy:HH:mm:ss
server.jetty.accesslog.enabled=true
server.jetty.accesslog.extended-format=false
server.jetty.accesslog.file-date-format=dd/MMM/yyyy
server.jetty.accesslog.filename=/var/log/prod/access.log
server.jetty.accesslog.log-latency=true
server.jetty.accesslog.log-server=false
server.jetty.accesslog.retention-period=31
server.jetty.max-http-post-size=10MB

log-latecy似乎既不工作也不汇总访问日志file-data-format遵守application.properties. 请帮忙

标签: springspring-bootjettyembedded-jetty

解决方案


从 Spring 2.4.2 开始,提供WebServerFactoryCustomizer自定义 Jetty Servlet https://docs.spring.io/spring-boot/docs/2.0.0.M3/reference/html/howto-embedded-web-servers.html#howto-configure -码头

以下解决方案可用于支持访问日志格式。

@Configuration
public class JettyWebServerCustomizer implements WebServerFactoryCustomizer<JettyServletWebServerFactory> {
    @Override
    public void customize(JettyServletWebServerFactory factory) {
        factory.getConfigurations();
        factory.addServerCustomizers(server -> {
            if (server.getRequestLog() instanceof CustomRequestLog) {
                CustomRequestLog existingRequestLog = (CustomRequestLog) server.getRequestLog();
                CustomRequestLog customRequestLog = new CustomRequestLog(existingRequestLog.getWriter(), "%{client}a - %u %t \"%r\" %s %O %{ms}T");
                server.setRequestLog(customRequestLog);
            }
        });
    }
}

CustomRequestLog 还提供了另一个构造函数CustomRequestLog(String file, String format),可用于传递文件名以支持滚动文件附加程序。


推荐阅读