一 初接触

        刚接触一个项目,让我管理一下日志模块,决定使用logback。

     在本地环境(win7)下,运行微服务可以logback按照预期的样子执行,日志级别,滚动方式都很正确,但是我到开发环境(CentOS7)一看,没有生成日志文件。

       于是百度,全部说的都是log4j的jar包冲突,导致我在这边路上走了很远。。

       然后我在本地搭了一个虚拟机,直接用java -jar 的方式运行微服务,发现日志文件生成正常。

       那么我本地的虚拟机和开发环境唯一的区别是开发环境用了docker。

       于是我用了一条命令 find / -name 'log的文件名' -type d

       发现其实日志都是正常生成了,只是他跑到了别的地方。

二 发现问题

       日志发现了以后,一周后发现每次重新部署开发环境的时候,以前日志文件会消失,了解到只要是容器内的数据,当容器删除或者重启时,以前的数据就会消失,于是搜索问题发现的解决的方法是Docker目录挂载。就是在从镜像启动容器的时候,用-v的命令,将容器里的目录和宿主机的一个目录关联起来,容器里面目录里面的内容如果修改了,宿主机挂载的目录里面的内容也会跟着修改,而且当容器被删除时,宿主机里面的数据不会消失。

      在logback中的配置的日志目录为/usr/local/src/logs,所以在启动的时候将容器的这个目录挂载到宿主机随便哪个目录:

docker run -it -v /usr/local/src/logs:/usr/local/src/logs test/base:1.0.0 /bin/bash

-v命令后面,冒号前边为宿主机目录,后面为容器目录(容器目录指的是我们使用命令进入到容器内的目录,而不是我们用FileZilla直接看到的目录),且必须为绝对路径,也就是要以 / 开头。test/base:1.0.0是镜像的名称和标签。

或者直接在Dockerfile文件中加上一句:VOLUME  usr/local/src/logs ,但是这样会挂载到docker的volumn/*/usr/local/src/logs目录下,而不是宿主机的/usr/local/src/logs目录下。

三 检查

1 运行容器成功以后,用docker ps 命令查看正在运行的容器的信息

2 进入容器:docker exec -it f880d4b4964f bash,网上很多最后面用的是/bin/bash,我用的时候报错,最后是从stack overflow上面找到了解决办法,改用bash。

3 找到你自己在logback中设置的目录,查看日志是否生成

4 发现有日志生成,找到自己设置的宿主机挂载目录,检查宿主机挂载的目录是否有一模一样的日志文件:

发现有对应的日志文件

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐