登录部署到 Docker Tomcat 的 Spring 启动应用程序

Logging In A Spring Boot Application Deployed to Docker Tomcat

我有一个 dockerized 开发环境设置了一些图像:

我已经配置 Tomcat 来激活 manager webapp,这样我就可以使用 Maven cargo 插件来部署 Spring Boot 应用程序。从货物正确上传我的 war 到管理器的意义上来说,部署似乎是有效的。不幸的是,它不会写入应用程序日志,并且该应用程序无法运行(当然很高兴看到日志来找出原因,对吧?)。

这是我的 docker-compose.yml 文件的相关部分。我将日志目录定向到主机系统上的一个卷。

services:
  tomcat:
    container_name: tomcat
    image: tomcat:10.0-jdk11-openjdk
    restart: always
    
    ports: 
      - "8080:8080"
    networks:
      static:
        ipv4_address: 192.168.20.10
    volumes:
    - '/home/jason/development/projects/docker/java-dev-environment/volumes/tomcat/usr_local_tomcat_conf:/usr/local/tomcat/conf'
    - '/home/jason/development/projects/docker/java-dev-environment/volumes/tomcat/usr_local_tomcat_webapps:/usr/local/tomcat/webapps'
    - '/home/jason/development/projects/docker/java-dev-environment/volumes/tomcat/usr_local_tomcat_logs:/usr/local/tomcat/logs'

这是 logback.xml 文件(位于 Spring 启动应用程序的 src/main/resources 目录中:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property name="LOGS" value="/usr/local/tomat/logs/gliese" />

    <include resource="org/springframework/boot/logging/logback/base.xml" />

    <appender name="Console"
              class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>
                %black(%d{ISO8601}) %highlight(%-5level) [%blue(%t)] %yellow(%C{1.}): %msg%n%throwable
            </Pattern>
        </layout>
    </appender>

    <appender name="RollingFile"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOGS}/gliese.log</file>
    <encoder
            class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <Pattern>%d %p %C{1.} [%t] %m%n</Pattern>
    </encoder>
    <rollingPolicy
            class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!-- rollover daily and when the file reaches 10 MegaBytes -->
        <fileNamePattern>${LOGS}/gliese-%d{yyyy-MM-dd}.%i.log
        </fileNamePattern>
        <timeBasedFileNamingAndTriggeringPolicy
                class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <maxFileSize>10MB</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>
    </appender>

    <!-- LOG everything at INFO level -->
    <root level="info">
        <appender-ref ref="RollingFile" />
        <appender-ref ref="Console" />
    </root>
</configuration>

根据我的阅读,这应该将应用程序输出定向到 /usr/local/tomcat/logs 的子目录,我已确认该目录存在(在家庭系统上)。

有人知道我为什么看不到 gliese.log 文件吗?我已经在 tomcat 主机容器中寻找它,以防它去了其他地方,但没有运气。

除非您正在使用 Spring Boot 3.0(尚未达到 GA),否则您应该使用 Tomcat 9。 Tomcat 10 实现了 Servlet 5 规范,它重新打包了javax.servlet API 到 jakarta.servlet。 Spring Boot 在 3.0 发布之前不会支持它。