python - 为什么 Django 日志不能与 Gunicorn 一起使用?

标签 python django gunicorn

我有一个 django 站点,它位于 gunicorn 服务器后面。
以下是 django 的日志记录设置 -

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'verbose': {
            'format': '[%(asctime)s][%(levelname)s] %(message)s',
        },
    },
    'handlers': {
        'file': {
            'level': os.environ['DJANGO_LOGLEVEL'],
            'class': 'logging.FileHandler',
            'filename': '/mnt/storage/logs/django.log',
            'formatter': 'verbose',
        },
    },
    'loggers': {
        'django': {
            'handlers': ['file'],
            'level': os.environ['DJANGO_LOGLEVEL'],
            'propagate': True,
        },
    },
}

这是启动 gunicorn 服务器的命令 -
gunicorn training_service.wsgi -b 0.0.0.0:8000 -w 4 --access-logfile /mnt/storage/logs/access.log --log-file /mnt/storage/logs/gunicorn.log --log-level $GUNICORN_LOGLEVEL

现在,我的理解是,两个日志框架都应该完全独立地工作。
但是当我通过调用 manage.py runserver 启动 django 站点时django 设置预计会进行日志记录工作。

但是当我使用 gunicorn 命令启动同样的事情时,日志格式和来自 django 的调试日志都消失了。我不确定这里出了什么问题,因为 disable_existing_loggers也设置为false。而且我不知道 gunicorn 中是否有任何设置会影响 django 的日志记录功能。

唯一的区别是当我使用 gunicorn 运行时,Debug 设置为 False。

最佳答案

我有同样的问题,在我的 views.py 中,我有以下行

import logging
logger = logging.getLogger("logger_name")

我打印了logger.__dict__,结果发现logger有Disabled=True
因此,在执行任何信息/调试/错误等之前,我将其更改为 False。
logger.disabled = False

然后它就像一个魅力

关于python - 为什么 Django 日志不能与 Gunicorn 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54944287/

相关文章:

javascript - 将简单的 Perl 脚本翻译成 Python 以向客户端发送响应?

django - Tastypie,为多对多关系添加元素

python - 用于 Django 的 Gunicorn 异步和线程 worker

python - Systemd + 非根 Gunicorn 服务 = 不存在的子进程

django - gunicorn、django 和 nginx 的静态文件

python - 列表到列表字典(Python 优化)

python - 创建插入对象

java - 关于 Django、Java、Python、HTML 和网站开发的总体问题

Django 和 Postgres - 索引行大小超过 btree 版本 4 最大值

Python:如何操作列表以获取以 '+' 开头的字符串?