Docker 容器怎么收集Django的日志

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查看的更方便而已。还是可以写到文件的。

你这里的看不到的原因有两种:

  1. Django配置有问题。
  2. docker-compose那里的路径挂载有问题。可以通过查看docker的容器的目录挂载信息来排查。

以上是 Docker 容器怎么收集Django的日志 的全部内容, 来源链接: utcz.com/a/161933.html

回到顶部