【问题标题】:How to configure django logging for production under gunicorn server?如何在 gunicorn 服务器下为生产配置 django 日志记录?
【发布时间】:2017-06-26 15:26:04
【问题描述】:

我已经设置了这个日志配置:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse'
        }
    },
    'formatters': {
        'verbose': {
            'format': '%(asctime)s %(levelname)s [%(name)s:%(lineno)s] %(module)s %(process)d %(thread)d %(message)s'
        }
    },
    'handlers': {
        'console': {
            'level': 'INFO',
            'class': 'logging.StreamHandler',
            'stream': sys.stdout,
            'formatter': 'verbose'
        }
    },
    'loggers': {
        'gunicorn.errors': {
            'level': 'INFO',
            'handlers': ['console'],
            'propagate': True,
        },
    }
}

好像一点效果都没有。当标志 DEBUG 设置为 True 时,我可以在控制台中看到一些错误。但是,当它设置为False 时,我不能。那么,尽管DEBUG 标志被设置为一种或另一种方式,如何将错误记录到控制台?

【问题讨论】:

  • 你用的是什么 django 版本?
  • Django 版本为 1.10

标签: django logging gunicorn


【解决方案1】:

尝试使用 gunicorn 添加 --capture-output--enable-stdio-inheritance

/home/ubuntu/inside-env/bin/gunicorn --access-logfile access.log --error-logfile error.log --capture-output --enable-stdio-inheritance --workers 3 --bind unix:/home/ubuntu/path-to-project/webapp.sock project.wsgi:application

然后在你看来,

import logging 
logging.basicConfig(level='DEBUG')
logging.info('...something...')

【讨论】:

    【解决方案2】:

    在django中1.9default logging configuration has been changed

    更改默认日志配置¶

    为了更容易编写自定义日志配置,Django 的 默认日志配置不再定义“django.request”和 “django.security”记录器。相反,它定义了一个“django” 记录器,在 INFO 级别过滤,带有两个处理程序:

    ‘console’:在 INFO 级别过滤,只有在 DEBUG=True 时才有效。 ‘mail_admins’:在错误级别过滤,仅在以下情况下才有效 调试=假。如果你没有覆盖 Django 的默认日志,你 应该会看到行为的最小变化,但您可能会看到一些新的 例如,登录到 runserver 控制台。

    如果你要覆盖 Django 的默认日志,你应该检查 看看你的配置如何与新的默认值合并。

    所以您需要做的就是简单地覆盖默认配置,将其添加到您的loggers

    'django':{
        'level': 'INFO',
        'handlers': ['console'],
        'propagate': True,
    }  
    

    现在登录控制台不再依赖DEBUG

    希望这会有所帮助!

    【讨论】:

    • 我也认为你可以删除gunicorn.errordisable_existing_loggers,除非你有额外的配置需要它们
    • 我实际上将 gunicorn.error 替换为您提供的内容,因为它没有做任何事情。
    • 在 Django 1.11 中已改回 django.requestdjango.servergithub.com/django/django/blob/1.11.7/django/utils/log.py
    • 感谢@akshar,很奇怪,在 1.11 发行说明中没有提及此内容...,我会看看如何将其添加到答案中。
    猜你喜欢
    • 2016-06-16
    • 1970-01-01
    • 2011-03-08
    • 1970-01-01
    • 2022-11-16
    • 2013-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多