Gunicorn swallowing exceptions #1051

pikeas opened this Issue Jun 18, 2015 · 5 comments


None yet

3 participants

pikeas commented Jun 18, 2015

When I I override LOGGING in my Django, gunicorn swallows exceptions (runserver displays them). If I revert to Django's default LOGGING config, everything works as expected. Here's my LOGGING setup:

    'version': 1,
    'formatters': {
        'long': {
            'format': "%(asctime)s %(levelname)-8s %(name)s %(message)s",
    'handlers': {
        'stderr': {
            'class': 'logging.StreamHandler',
            'formatter': 'long',
            'level': 'DEBUG',
            'stream': sys.stderr,
    'loggers': {
        '': {
            'handlers': ['stderr'],
            'level': env('LOG_LEVEL', 'INFO'),

Is gunicorn hooking into logging in a way that's incompatible with this? Even if that's the case, exceptions are being swallowed (never displayed) by gunicorn, not logging messages.

Here's my for reference:

bind = "%s:%s" % (env('GUNICORN_IP', ''), env('GUNICORN_PORT', 8000))
forwarded_allow_ips = '*'
reload = env('GUNICORN_CODE_RELOAD', False)

access_log = '-'
error_log = '-'
pikeas commented Jun 18, 2015

Solved. The LOGGING dictionary needs disable_existing_loggers: False. This way gunicorn's logging handlers won't be disabled (default when configuring LOGGING).

May be worth a mention in gunicorn's docs?

tilgovi commented Jun 18, 2015

Absolutely. Let us know where you think it should go, please! Happy to just have you say so or open a PR that closes this issue and we'll merge it. Thanks!

pikeas commented Jun 18, 2015

@tilgovi Hm...that's a bit tricky. Based on the current organization of the docs, Settings/Logging doesn't make much sense, as Settings only describes specific options and their usage.

How about adding a new section, Deploying/Django Configuration to mirror the existing Nginx Configuration section? Either that, or an additional note under Deploying/Logging.

tilgovi commented Jun 18, 2015

That sounds okay to me. I would also link to it with a note in the "Django" sub-section of the "Integration" section of "Running Gunicorn" to increase the likelihood that a first-time user discovers it.

benoitc commented Jun 22, 2015

I would just put the information in the integration subsection . Deploying is about operations more than configuration. Thoughts?

@tilgovi tilgovi added this to the 20.0.0 milestone Dec 31, 2015
@benoitc benoitc added a commit that closed this issue May 2, 2016
@benoitc document LOGGING overriding
fix #1051
@benoitc benoitc closed this in 5fa32a6 May 2, 2016
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment