How to see details of Django errors with Gunicorn? How to see details of Django errors with Gunicorn? nginx nginx

How to see details of Django errors with Gunicorn?


From your comment I think this is a config problem in your django site, not a matter of gunicorn log, logs will not show more than django send to it.

Here is an example of how you can configure django setting to send log to your file (instead of send it to admins by email as default):

LOGGING = {    'version': 1,    'disable_existing_loggers': True,    'formatters': {        'verbose': {            'format': '%(asctime)s %(levelname)s [%(name)s:%(lineno)s] %(module)s %(process)d %(thread)d %(message)s'        }    },    'handlers': {        'gunicorn': {            'level': 'DEBUG',            'class': 'logging.handlers.RotatingFileHandler',            'formatter': 'verbose',            'filename': '/opt/djangoprojects/reports/bin/gunicorn.errors',            'maxBytes': 1024 * 1024 * 100,  # 100 mb        }    },    'loggers': {        'gunicorn.errors': {            'level': 'DEBUG',            'handlers': ['gunicorn'],            'propagate': True,        },    }}

Read configuring logging (it provide a very well explanations of log settings options) and study the file django/utils/log.py to configure django loggin to appears more detailed on gunicorn logs.

Also check this answer and this which provide setting examples to send logs errors directly to a file. And consider to use Sentry to handle log errors, as is recomended by django guys.

Hope this helps.


This configuration worked for me. Add --capture-output --enable-stdio-inheritance with gunicorn command like below.

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

With this setup, do enable logging in this way

import logging logging.basicConfig(level='DEBUG')logging.info('hello world')

This way you will get to see the errors in the App as well.


1. sending errors to the console

These are the loggers that use mail_admins by default (see django/utils/log.py):

    'django.request': {        'handlers': ['mail_admins'],        'level': 'ERROR',        'propagate': False,    },    'django.security': {        'handlers': ['mail_admins'],        'level': 'ERROR',        'propagate': False,    },

you would need to change the handlers to go to the console so that it appears in your gunicorn log rather than send emails with mail_admins. Please note that it's not as chatty as when DEBUG=True.

 'loggers': {    'django': {        'level': 'ERROR',        'handlers': ['console'],    }, }

2. sending errors via mail_admins

Also based on configuring logging, explicitly create a handler that calls mail_admins; e.g. based on django/utils/log.py:

 'handlers': {    'mail_admins': {        'level': 'ERROR',        'class': 'django.utils.log.AdminEmailHandler'    }, }, 'loggers': {    'django': {        'handlers': ['mail_admins'],    }, }

This requires you to set email related settings.

3. other solutions

If you were not looking for solution #1, then your question is a duplicate of:How do you log server errors on django sites