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

如何在Spring Boot应用中启用Tomcat日志

Spring Boot 开启内嵌Tomcat生成原生日志文件配置方案

Spring Boot 内嵌Tomcat默认不会生成外部Tomcat部署时logs目录下的host-manager.log、localhost.log、manager.log、访问日志等文件,可通过以下配置实现完全对齐外部Tomcat的日志生成逻辑:


一、基础访问日志快速开启(配置文件方式)

如果只需要生成Tomcat访问日志,直接在项目配置文件中添加参数即可,无需修改代码:

application.yml 配置示例

server:
  tomcat:
    basedir: . # 设置Tomcat工作根目录为项目运行目录
    accesslog:
      enabled: true # 开启访问日志
      directory: logs # 日志存放目录,对齐外部Tomcat的logs文件夹
      prefix: localhost_access_log # 日志文件名前缀
      suffix: .log # 日志文件后缀
      pattern: common # 沿用外部Tomcat默认日志格式
      rename-on-rotate: true

application.properties 配置示例

server.tomcat.basedir=.
server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.directory=logs
server.tomcat.accesslog.prefix=localhost_access_log
server.tomcat.accesslog.suffix=.log
server.tomcat.accesslog.pattern=common
server.tomcat.accesslog.rename-on-rotate=true
  • 该配置启动后只会生成localhost_access_log.*.log访问日志,无法生成主机管理、应用管理类的日志文件。

二、全量Tomcat日志配置(对齐外部Tomcat所有日志文件)

要生成host-manager.log、localhost.log、manager.log三类日志,需要自定义内嵌Tomcat配置,同时配合日志框架做分流:

  1. 新增Tomcat自定义配置类,注册Tomcat原生日志组件:
import org.apache.catalina.startup.Tomcat;
import org.apache.catalina.valves.AccessLogValve;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
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 TomcatLogConfig {
    @Bean
    public WebServerFactoryCustomizer<TomcatServletWebServerFactory> tomcatLogCustomizer() {
        return factory -> {
            // 配置Tomcat工作根目录,logs文件夹将生成在该路径下
            String runPath = System.getProperty("user.dir");
            factory.setBaseDirectory(new File(runPath));
            // 注册Tomcat默认的主机、应用管理监听器,和外部Tomcat初始化逻辑一致
            Tomcat.addDefaultUserConfig(factory.getTomcatContextCustomizers());
            factory.addContextLifecycleListeners(new org.apache.catalina.startup.HostConfig());

            // 自定义访问日志阀,和配置文件开启效果一致
            AccessLogValve accessLogValve = new AccessLogValve();
            accessLogValve.setDirectory(runPath + File.separator + "logs");
            accessLogValve.setPrefix("localhost_access_log");
            accessLogValve.setSuffix(".log");
            accessLogValve.setPattern("common");
            accessLogValve.setEnabled(true);
            factory.addContextValves(accessLogValve);
        };
    }
}
  1. 配合日志框架做日志分流(以Spring Boot默认集成的Logback为例),在src/main/resources/logback.xml中添加如下配置:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 原有业务日志配置保持不变即可 -->
    <property name="LOG_PATH" value="logs"/>

    <!-- localhost.log 输出主机、应用部署相关日志 -->
    <appender name="LOCALHOST_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/localhost.log</file>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{36} - %msg%n</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/localhost.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
    </appender>

    <!-- host-manager.log 输出虚拟主机管理相关日志 -->
    <appender name="HOST_MANAGER_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/host-manager.log</file>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{36} - %msg%n</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/host-manager.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
    </appender>

    <!-- manager.log 输出应用部署管理相关日志 -->
    <appender name="MANAGER_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/manager.log</file>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{36} - %msg%n</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/manager.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
    </appender>

    <!-- 绑定Tomcat对应包日志到指定文件 -->
    <logger name="org.apache.catalina.core.ContainerBase.[Tomcat].[localhost]" level="INFO" additivity="false">
        <appender-ref ref="LOCALHOST_FILE"/>
    </logger>
    <logger name="org.apache.catalina.manager.host" level="INFO" additivity="false">
        <appender-ref ref="HOST_MANAGER_FILE"/>
    </logger>
    <logger name="org.apache.catalina.manager" level="INFO" additivity="false">
        <appender-ref ref="MANAGER_FILE"/>
    </logger>
</configuration>

若项目使用Log4j2等其他日志框架,无需修改上面的Tomcat配置类代码,参照Logback的分流逻辑,将对应Tomcat组件包的日志输出到目标文件即可。


三、效果验证

启动应用后,会在项目运行根目录下自动生成logs文件夹,里面包含和外部Tomcat完全一致的localhost.log、host-manager.log、manager.log、localhost_access_log.*.log文件:

  • IDE启动时,logs文件夹生成在项目根目录
  • Jar包部署启动时,logs文件夹生成在Jar包所在同级目录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 11:21:26