Docker 容器怎么收集Django的日志
问题描述
Docker 部署 Django 应用无法自动收集 Django 的日志
问题出现的环境背景及自己尝试过哪些方法
1、自定义的 logging 模块,在项目中需要写入日志的地方调用,并按照日期将日志文件存入文件中,所有日志收集到 logfile 文件夹中
2、docker-compose.yml 中将 logfile 映射到本地(docker volume)
本想着每天能够自动收集日志文件,但是发现不管是容器内部,还是 volume 中都没有收集。偶然在知乎上看到一篇文章,说既然用 Docker,就不要想着把日志写入文件,而是配置 settings 将日志标准输出,再使用 Fluented 收集,不知道是否这个原因。
相关代码
// 请把代码文本粘贴到下方(请勿用图片代替代码)
1、自定义的 logger:
import os import time
import logging
from logging.handlers import RotatingFileHandler
def log(name):
logger = logging.getLogger(name)
logger.setLevel(logging.DEBUG) \# 设置日志级别
\# 日志文件名
path = os.path.split(os.path.realpath(\_\_file\_\_ + "/../../"))\[0\] + r"/logfile/" \+ time. \\
strftime("%Y-%m-%d", time.gmtime())
fh = RotatingFileHandler(path, maxBytes\=1024 \* 1024 \* 100, backupCount\=20, encoding\='utf-8')
fh.namer = lambda x: "backup." \+ x.split(".")\[-1\]
fmt = logging.Formatter("%(asctime)s %(levelname)s %(funcName)s:%(lineno)d %(pathname)s %(message)s") \# 日志输出格式
fh.setFormatter(fmt)
logger.addHandler(fh)
return logger
2、使用:
from utils.common.LogHandler import log logger = log(\_\_name\_\_)
logger.info('日志记录!')
3、docker-compose.yml
djangoapp: build: .
volumes:
- .:/opt/services/djangoapp/src
- logfile:/opt/services/djangoapp/src/CBS/logfile/
- static_volume:/opt/services/djangoapp/src/CBS/static_all/
networks:
- nginx_network
- database1_network
depends_on:
- database1
restart: always
environment:
- TZ=Asia/Shanghai
...
volumes:
database1_volume:
static_volume:
logfile:
你期待的结果是什么?实际看到的错误信息又是什么?
希望能够实现自动按照之前在本地一样,能够按照日期收集日志文件。
回答:
偶然在知乎上看到一篇文章,说既然用 Docker,就不要想着把日志写入文件,而是配置 settings 将日志标准输出,再使用 Fluented 收集,不知道是否这个原因
不是这个原因,这里之所以这么说,是因为写在日志文件不方便,直接用docker logs查看的更方便而已。还是可以写到文件的。
你这里的看不到的原因有两种:
- Django配置有问题。
- docker-compose那里的路径挂载有问题。可以通过查看docker的容器的目录挂载信息来排查。
以上是 Docker 容器怎么收集Django的日志 的全部内容, 来源链接: utcz.com/a/161933.html