如何在gunicorn服务器下为生产配置django日志记录?

时间:2017-02-08 20:18:06

标签: django logging gunicorn

我已设置此日志记录配置:

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标志被设置为某种方式,如何将错误记录到控制台?

2 个答案:

答案 0 :(得分:4)

在django 1.9 default logging configuration has been changed

  

更改默认日志记录配置¶

     

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

     

'console':在INFO级别过滤,仅在DEBUG = True时才有效。   'mail_admins':在ERROR级别过滤,仅在有效时才激活   DEBUG = FALSE。如果您没有覆盖Django的默认日志记录,那么   应该看到行为的微小变化,但你可能会看到一些新的变化   例如,记录到runserver控制台。

     

如果要覆盖Django的默认日志记录,则应该检查   了解您的配置如何与新的默认值合并。

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

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

登录到控制台现在不依赖于DEBUG

希望这有帮助!

答案 1 :(得分:2)

尝试将--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...')