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项目自动部署 本文主要介绍了基于Jenkins、Gitlab和Docker实现SpringBoot项目自动部署的方法。下面将从Jenkins的安装、配置到自动化构建和部署的整个过程进行详细说明。 ...
关键看这里吧(Permission denied), 一直没有看正方,以为是配置日志文件 找不到有问题,下面是部分异常 10:35:09,498 |-ERROR in ch.qos.logback.core.rolling.RollingFileAppender[FILE] - openFile(null,...
该过程涉及到多个步骤,包括配置 Docker、编写 Dockerfile、在 IDEA 中连接服务器 Docker、配置 Docker 镜像容器和启动容器等。 一、配置 Docker 首先,我们需要配置 Docker,以便开放外部访问 Docker 端口。为此...
java源码 java 博客系统源码( Docker SpringBoot Mybatis thymeleaf )
简单springboot项目搭建,博文《使用Docker部署springboot项目》中提到的项目源码,适合新手,如有需要,谢谢下载。
首先,当我们运行Docker容器时,通常会用`-v`参数来挂载宿主机的目录到容器内,以便于我们能直接在宿主机上编辑配置文件或查看日志,如`/Docker/nginx/conf/nginx.conf`挂载到`/etc/nginx/nginx.conf`,`/Docker/...
安装maven环境,通过docker命令打包镜像,然后编写docker-compose编排文件,部署springboot工程
Docker 安装tomcat:7 挂载目录到本地,访问不了,webapps.dist文件
能教你使用docker部署springboot项目,通俗易懂,是你了解如何使用docker的有用小例子!
docker-compose启动springboot项目-springboot+redis实战案例。可以参考文章:https://blog.csdn.net/Ber_Bai/article/details/119995240
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上
标题 "springboot + dockerclient +redis +esclient" 描述了一种基于Spring Boot的应用场景,该应用集成了Docker客户端、Redis和Elasticsearch(ES)客户端,实现了数据计算、日志管理和任务队列功能。这里我们将...
0639_极智开发_解读创建docker后修改挂载目录的方式