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:

你期待的结果是什么?实际看到的错误信息又是什么?

希望能够实现自动按照之前在本地一样,能够按照日期收集日志文件。

阅读 4.7k
1 个回答
新手上路,请多包涵
偶然在知乎上看到一篇文章,说既然用 Docker,就不要想着把日志写入文件,而是配置 settings 将日志标准输出,再使用 Fluented 收集,不知道是否这个原因

不是这个原因,这里之所以这么说,是因为写在日志文件不方便,直接用docker logs查看的更方便而已。还是可以写到文件的。

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

  1. Django配置有问题。
  2. docker-compose那里的路径挂载有问题。可以通过查看docker的容器的目录挂载信息来排查。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题