为什么Sentry建议从django.db.backends进行Django日志记录配置静默日志记录?

时间:2019-02-27 04:06:54

标签: python django sentry raven

(现已不建议使用)Sentry Django集成文档建议使用以下LOGGING配置(https://docs.sentry.io/clients/python/integrations/django/):

LOGGING = {
    'version': 1,
    'disable_existing_loggers': True,
    'root': {
        'level': 'WARNING',
        'handlers': ['sentry'],
    },
    'formatters': {
        'verbose': {
            'format': '%(levelname)s  %(asctime)s  %(module)s '
                      '%(process)d  %(thread)d  %(message)s'
        },
    },
    'handlers': {
        'sentry': {
            'level': 'ERROR', # To capture more than ERROR, change to WARNING, INFO, etc.
            'class': 'raven.contrib.django.raven_compat.handlers.SentryHandler',
            'tags': {'custom-tag': 'x'},
        },
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'verbose'
        }
    },
    'loggers': {
        'django.db.backends': {
            'level': 'ERROR',
            'handlers': ['console'],
            'propagate': False,
        },
        'raven': {
            'level': 'DEBUG',
            'handlers': ['console'],
            'propagate': False,
        },
        'sentry.errors': {
            'level': 'DEBUG',
            'handlers': ['console'],
            'propagate': False,
        },
    },
}

我对这个记录器定义特别感兴趣:

    'django.db.backends': {
        'level': 'ERROR',
        'handlers': ['console'],
        'propagate': False,
    },

对我来说,这表明源自django.db.backends(及其后代)的日志条目仅发送到控制台,并且不会传播到根记录器(配置为发送日志条目{{1}) }到哨兵。

Sentry文档似乎甚至没有承认此记录器的存在。此配置按原样显示,是让Django登录到Sentry的一种方法。

  1. 我的阅读正确吗?
  2. 您能为此提出任何理由吗?似乎您想将>= WARNING django.db.backends.*日志条目发送到Sentry。

1 个答案:

答案 0 :(得分:1)

django.db.backends包含每个SQL查询的日志,这是Django唯一用于它的内容。据我所知,此命名空间上从未记录过任何警告或错误。

我们想忽略来自django.db.backends的日志记录面包屑,因为我们已经有了一个自定义钩子,用于在Django中捕获SQL查询,以便我们可以与UI中的其他面包屑显示它们不同。

Raven将这种逻辑转移给用户,新的SDK sentry_sdk在内部忽略了记录器。您可以在此处找到等效项:https://github.com/getsentry/sentry-python/blob/fde5576e489dd7926fce7bae7be8399021cdde14/sentry_sdk/integrations/django/init.py#L365