Skip to content

Gunicorn swallowing exceptions #1051

Closed
Closed
@pikeas

Description

@pikeas

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

LOGGING_CONFIG = None
LOGGING = {
    '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'),
        },
    }
}
logging.config.dictConfig(LOGGING)

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 gunicorn.conf.py for reference:

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

access_log = '-'
error_log = '-'

Activity

pikeas

pikeas commented on Jun 18, 2015

@pikeas
Author

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

tilgovi commented on Jun 18, 2015

@tilgovi
Collaborator

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

pikeas commented on Jun 18, 2015

@pikeas
Author

@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

tilgovi commented on Jun 18, 2015

@tilgovi
Collaborator

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

benoitc commented on Jun 22, 2015

@benoitc
Owner

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

added this to the 20.0.0 milestone on Dec 31, 2015
added a commit that references this issue on Mar 16, 2018
459a37e

4 remaining items

Loading
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @benoitc@tilgovi@pikeas

        Issue actions

          Gunicorn swallowing exceptions · Issue #1051 · benoitc/gunicorn