tomcat 容器中 springboot logback.xml 配置日志输出到 console, docker logs 为什么看不到

我在测试把 springboot 的程序部署到 tomcat 容器中发现springboot 的日志文件 catalina.out 没有生成,docker logs 也看不到任何相关日志,日志信息不知道去哪里了 ...

分析过程

  1. 更改logback.xml console 为 file, 重新测试后发现 catalina.out 文件可以生成,springboot 相关日志也是存在的
     
        
        
    
    
  2. 确认 jdk 版本 (1.8)
  3. 查看 image dockerfile, 我们自定义的 image 里主进程是 run.sh (里面包含了 download war, unpack, start tomcat 等步骤),官网的 tomcat 镜像主进程是 catalina
  4. 下载了官网的 tomcat 并部署 springboot 程序,docker logs 可以看到 springboot 日志

总结

我们自定义的镜像和官网的镜像区别是主进程(官网的是 catalina.sh, 我们的是 run.sh),运行官网的 tomcat 容器 pid 为 1 的进程是 tomcat, 我们自定义镜像容器 pid 为 1 的是 run.sh, tomcat 是 run.sh 的子进程。

查询相关 docker 文档确认: 只有主进程 (pid 为1)的相关进程日志会输出到 stdout (docker logs 可以查询), 所以我们这种情况需要更改 logback.xml 的 console 为 file, 或者更改镜像把 tomcat 的启动脚本直接作为主进程

你可能感兴趣的:(tomcat 容器中 springboot logback.xml 配置日志输出到 console, docker logs 为什么看不到)