登录部署到 Docker Tomcat 的 Spring 启动应用程序
Logging In A Spring Boot Application Deployed to Docker Tomcat
我有一个 dockerized 开发环境设置了一些图像:
- Tomcat 10.0
- Postgres 12.1
- PgAdmin 4
我已经配置 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 发布之前不会支持它。
我有一个 dockerized 开发环境设置了一些图像:
- Tomcat 10.0
- Postgres 12.1
- PgAdmin 4
我已经配置 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 发布之前不会支持它。