You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Logback Access与Spring Boot 3.2.x及Jetty 12.x兼容问题咨询

Spring Boot 3.2.x + Jetty 相关问题解答

问题1:Spring Boot 3.2.x + Jetty 12.x 集成 Logback Access 的替代方案

Jetty 12.x彻底重构了底层API,不再依赖Servlet API,而当前使用的Logback Access 1.4.14版本强依赖Servlet API,无法直接集成。以下是几种可行的替代方案:

方案1:改用Jetty原生SLF4J请求日志实现

Jetty 12.x自带Slf4jRequestLog,可直接对接SLF4J,通过Logback输出请求日志,无需依赖Logback Access。示例配置代码如下:

@Bean
JettyServerCustomizer configureAccessLog() {
    return server -> {
        Slf4jRequestLog requestLog = new Slf4jRequestLog();
        // 设置日志名称,对应logback配置中的logger
        requestLog.setLoggerName("jetty.request");
        // 自定义日志格式,遵循Jetty格式规范
        requestLog.setFormat("%h %l %u %t \"%r\" %s %b \"%{Referer}i\" \"%{User-Agent}i\"");
        requestLog.start();
        server.setRequestLog(requestLog);
    };
}

随后在logback.xml中配置对应的logger,将日志输出到指定文件:

<appender name="JETTY_REQUEST" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>logs/jetty-request.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
        <fileNamePattern>logs/jetty-request.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
        <maxFileSize>100MB</maxFileSize>
        <maxHistory>30</maxHistory>
    </rollingPolicy>
    <encoder>
        <pattern>%msg%n</pattern>
    </encoder>
</appender>

<logger name="jetty.request" level="INFO" additivity="false">
    <appender-ref ref="JETTY_REQUEST"/>
</logger>

方案2:等待Logback Access适配Jetty 12.x

Logback社区已在推进Jetty 12.x的适配工作,后续发布的Logback 1.5.x及以上版本预计会支持Jetty 12,可关注版本更新后直接升级使用。

方案3:自定义适配层(不推荐)

自行实现Jetty 12.x的RequestLog接口,将Jetty的Request/Response对象转换为Logback Access所需的Servlet API兼容对象,但该方案开发维护成本较高,仅适合紧急场景。


问题2:Spring Boot 3.2.x 中配置 Jetty 11 的解决方案

Spring Boot 3.2.x依然支持Jetty 11.x,无需混用不同版本的starter组件,通过以下方式即可正确配置:

Maven配置示例

在pom.xml中添加Jetty版本属性,覆盖默认的Jetty 12版本:

<properties>
    <!-- 指定Jetty 11的稳定版本 -->
    <jetty.version>11.0.18</jetty.version>
</properties>

<dependencies>
    <!-- 使用Spring Boot 3.2.x官方jetty starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jetty</artifactId>
    </dependency>
</dependencies>

Gradle配置示例

在build.gradle中设置Jetty版本:

ext {
    set('jetty.version', '11.0.18')
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-jetty'
}

错误原因说明

你之前遇到的MissingWebServerFactoryBeanException,是因为混用了Spring Boot 3.2.0核心框架与3.1.6版本的spring-boot-starter-jetty,两者的Web服务器工厂类不兼容导致的。使用上述统一版本的配置方式,Spring Boot会自动根据指定的Jetty版本创建对应的ServletWebServerFactory实例,解决启动异常问题。


内容的提问来源于stack exchange,提问作者joerg20

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 09:33:14