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

如何设置Spring Boot Undertow服务器访问日志的保留期限?

Spring Boot Undertow 访问日志保留期限/文件数量配置

Spring Boot官方提供的Undertow访问日志配置属性里,确实没有直接设置保留期限或文件数量的选项,但可以通过以下两种方式实现需求:

方式一:自定义Undertow日志滚动策略

Undertow的访问日志默认基于RotatingFileOutputStream实现滚动,我们可以通过自定义UndertowServletWebServerFactory来配置日志的滚动规则,包括保留文件数量:

import io.undertow.server.handlers.accesslog.AccessLogHandler;
import io.undertow.server.handlers.accesslog.RotatingFileOutputStream;
import org.springframework.boot.web.embedded.undertow.UndertowServletWebServerFactory;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.io.File;

@Configuration
public class UndertowAccessLogConfig {

    @Bean
    public WebServerFactoryCustomizer<UndertowServletWebServerFactory> accessLogCustomizer() {
        return factory -> {
            factory.addDeploymentInfoCustomizers(deploymentInfo -> {
                deploymentInfo.addInitialHandlerChainWrapper(handler -> {
                    // 日志文件路径,替换为你的实际路径
                    String logFilePath = "logs/access.log";
                    // 配置滚动规则:单个日志文件上限10MB,保留10个归档文件,开启压缩
                    RotatingFileOutputStream outputStream = new RotatingFileOutputStream(
                            new File(logFilePath),
                            10 * 1024 * 1024,
                            10,
                            true
                    );
                    // 日志格式与配置文件中保持一致
                    return new AccessLogHandler(handler, outputStream,
                            "%h %l %u %t \"%r\" %s %b",
                            AccessLogHandler.DEFAULT_LOGGER_NAME,
                            true);
                });
            });
        };
    }
}

方式二:用外部日志框架(如Logback)接管访问日志

如果项目已使用Logback等日志框架,可以让Undertow将访问日志输出到SLF4J,再通过日志框架的配置控制滚动和保留规则:

1. 修改Spring Boot配置,开启SLF4J输出

在application.properties中添加:

server.undertow.accesslog.enabled=true
server.undertow.accesslog.pattern=%h %l %u %t \"%r\" %s %b
server.undertow.accesslog.use-slf4j=true

2. 在Logback配置文件(如logback-spring.xml)中添加访问日志Appender

<appender name="UNDERTOW_ACCESS" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>logs/access.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
        <!-- 归档文件命名规则 -->
        <fileNamePattern>logs/access.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
        <!-- 单个日志文件最大容量 -->
        <maxFileSize>10MB</maxFileSize>
        <!-- 日志保留天数 -->
        <maxHistory>30</maxHistory>
        <!-- 归档文件总大小上限 -->
        <totalSizeCap>1GB</totalSizeCap>
    </rollingPolicy>
    <encoder>
        <pattern>%msg%n</pattern>
    </encoder>
</appender>

<!-- 绑定Undertow访问日志的Logger -->
<logger name="io.undertow.accesslog" level="INFO" additivity="false">
    <appender-ref ref="UNDERTOW_ACCESS"/>
</logger>

这种方式灵活性更高,能利用日志框架成熟的滚动策略,支持按时间、大小组合滚动,同时限制总归档大小。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 03:17:17