springboot服务运行在docker容器中,产生的日志会随容器删除而被删除,而且也不好管理日志,比如做日志切割等,所以我们一般会把日志挂载到宿主机器上,这样运维人员也好管理日志,从日志定位问题也比较方便。
前提必须安装了docker和jdk8
1.首先需要让springboot产生日志文件到某个目录,比如/logs目录,一般情况下,springboot运行是没有日志文件产生的,这个日志文件并不是catalina.out,catalina.out为控制台输出,可以通过docker logs实时查看,但并不会生成一个日志文件的,之前一直以为catalina.out有输出就会在挂载卷有日志文件存在,其实不会,懵逼了好久。
这里我们可以结合logback,就是给springboot配置logback-spring.xml,然后让日志输出到/logs 目录下
logback-spring.xml如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
<!-- 项目名称 -->
<property name="PROJECT_NAME" value="demo2" />
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
<property name="LOG_HOME" value="./logs" />
<!-- 控制台输出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] %highlight([%-5level] %logger{50} - %msg%n)</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 按照每天生成日志文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${LOG_HOME}/catalina.%d{yyyy-MM-dd}.log</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>15</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
<!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>
<!--myibatis log configure-->
<logger name="com.apache.ibatis" level="TRACE"/>
<logger name="java.sql.Connection" level="DEBUG"/>
<logger name="java.sql.Statement" level="DEBUG"/>
<logger name="java.sql.PreparedStatement" level="DEBUG"/>
<!-- 开发环境下的日志配置 -->
<springProfile name="dev">
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
</springProfile>
<!-- 生产环境下的日志配置 -->
<springProfile name="prod">
<root level="INFO">
<appender-ref ref="FILE" />
</root>
</springProfile>
</configuration>
这样springboot就会产生日志到/logs下了,这一步很重要
2.有了日志文件产生,下一步我们就给springboot做镜像了。
先通过maven把springboot打包成demo2.jar
然后在linux上新建一个文件夹
mkdir /opt/demo2
把demo2.jar放到这个文件夹下
然后在此目录下新建一个Dockerfile文件
Dockerfile内容如下:
FROM java:8
ADD demo2.jar demo2.jar
EXPOSE 8087
ENTRYPOINT ["nohup","java","-Djava.security.egd=file:/dev/./urandom","-jar","/demo2.jar","--spring.profiles.active=dev",">>","catalina.out","2>&1","&"]
执行命令创建镜像
docker build -t demo2 .
执行命令运行镜像,产生容器
docker run -d --name demo2 -v /opt/demo2/logs:/logs demo2
注意必须,得有-v /opt/demo2/logs:/logs 执行容器的挂载目录
好了,我们进入容器查询,是否产生了日志文件,进入容器命令
docker exec -it demo2 /bin/sh
此次容器内的/logs目录下已经产生了catalina.log日志文件
然后退出容器,到宿主机器的/opt/demo2/logs/也有了一样的catalina.log日志文件
同样利用了logback做日志管理,按时间切割,按大小清理日志,挺好的
分享到:
相关推荐
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署
关键看这里吧(Permission denied), 一直没有看正方,以为是配置日志文件 找不到有问题,下面是部分异常 10:35:09,498 |-ERROR in ch.qos.logback.core.rolling.RollingFileAppender[FILE] - openFile(null,...
idea集成docker部署springboot项目
java源码 java 博客系统源码( Docker SpringBoot Mybatis thymeleaf )
简单springboot项目搭建,博文《使用Docker部署springboot项目》中提到的项目源码,适合新手,如有需要,谢谢下载。
安装maven环境,通过docker命令打包镜像,然后编写docker-compose编排文件,部署springboot工程
Docker 安装tomcat:7 挂载目录到本地,访问不了,webapps.dist文件
这篇文章主要介绍如何在docker上部署springboot项目。关于如何创建springboot项目可以看看这篇文章IDEA上面搭建一个SpringBoot的web-mvc项目遇到的问题 本文主要介绍docker部署springboot的三种方式,分别是:入门...
能教你使用docker部署springboot项目,通俗易懂,是你了解如何使用docker的有用小例子!
一个简答的demo,阐述如何在Docker上部署SpringBoot项目
查看nginx容器一直都是退出状态
Elastic Beanstalk - Docker 和 Spring Boot 从 Docker 容器将 Springboot 应用程序部署到 AWS Elastic Beanstalk安装克隆这个项目git clone ...构建和启动应用程序 cd docker-springboot-ebsmvn clean installcd ...
尚硅谷最新SpringBoot教学视频,包含docker部分内容,有兴趣的同学移步官网 http://www.atguigu.com/
docker和springboot结合的一个例子,使用docker打包springboot项目
docker部署springboot多模块项目
Docker部署SpringBoot+vue项目到Linux上
Intellij IDEA 中配置docker服务器,将springboot生成镜像,使用docker部署
将springboot发布到docker中