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

Docker容器中Tomcat部署SpringBoot War包无法生成自定义日志求助

解决Docker中Tomcat部署Spring Boot war包时Logback日志文件未生成的问题

问题根源

本地Tomcat从bin目录启动,Web应用的相对路径../logs会指向Tomcat根目录下的logs文件夹(如tomcat/logs),符合预期;但Docker容器中Tomcat的默认工作目录是/usr/local/tomcat,Logback配置的../logs会指向/usr/local/logs(而非预期的/usr/local/tomcat/logs),且该目录默认不存在,导致日志无法写入,只能输出到控制台。

解决方案

修改logback.xml中的日志根路径配置,使用Tomcat自动注入的系统变量${catalina.base}指定日志目录,该变量在本地和Docker环境中都会被设置为Tomcat的根目录路径,确保跨环境一致。

修改后的logback.xml关键配置:

<configuration>
    <property name="APPLICATION_NAME" value="test-app" />
    <!-- 用catalina.base指定Tomcat根目录下的logs文件夹 -->
    <property name="LOG_ROOT" value="${catalina.base}/logs" />
    <property name="LOG_FILE_NAME" value="${APPLICATION_NAME}.server.log" />

    <!-- 以下appender、logger配置保持不变 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%date [%thread] [%-5level] %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_ROOT}/${LOG_FILE_NAME}</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_ROOT}/${LOG_FILE_NAME}-%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
            <maxFileSize>5MB</maxFileSize>
            <maxHistory>18</maxHistory>
            <totalSizeCap>1GB</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>%date [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <logger name="com.test.APP" level="INFO" additivity="false">
        <appender-ref ref="FILE" />
    </logger>

    <root level="INFO">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
    </root>
</configuration>

验证步骤

  1. 重新打包项目:
mvn clean package
  1. 重新构建Docker镜像:
docker build -t test:v2 .
  1. 启动容器:
docker run -d -p 8080:8080 test:v2
  1. 进入容器检查日志文件:
docker exec -it <容器ID> ls /usr/local/tomcat/logs

此时应能看到test-app.server.log文件。

额外优化(可选)

如果需要将日志持久化到宿主机,启动容器时挂载日志目录:

docker run -d -p 8080:8080 -v /宿主机本地路径/tomcat-logs:/usr/local/tomcat/logs test:v2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 03:01:38