为什么此记录器不创建Sentry事件?

时间:2019-06-05 14:55:20

标签: python django logging sentry

我正在使用django和sentry-sdk。在我的django设置的记录器部分中,我具有以下处理程序:

'loggers': {
    'django.request': {
        'level': 'WARNING',                                     
        'handlers': ['console', ],                    
        'propagate': False
    }
}

sentry-sdk初始化如下:

import logging                                                                    
import sentry_sdk                                                                 
from sentry_sdk.integrations.django import DjangoIntegration                      
from sentry_sdk.integrations.logging import LoggingIntegration

sentry_logging = LoggingIntegration(                                              
    level=logging.INFO,
    event_level=logging.ERROR
)                                                                                 
sentry_sdk.init(                                                                  
    dsn="...",              
    integrations=[DjangoIntegration(), sentry_logging],                           
)                                                                                 

但是,以下示例未将错误事件发送到哨兵

import logging
logger = logging.getLogger('django.request')
logger.error('Why do I not appear in sentry?')

例如,其他人这样做

import logging
logger = logging.getLogger('another_module')
logger.error('And why do I do appear in sentry?')

问题:如何为带有propagate=False的模块解决此问题?

2 个答案:

答案 0 :(得分:1)

总的来说,我可以通过三种方式认为日志消息不会变成事件:

  • Quarter参数设置得太高(默认情况下出错,请执行event_level
  • 您的记录器级别太高(执行init(integrations=[LoggingIntegration(event_level=logging.DEBUG)])
  • 您的记录器有一个过滤器,可过滤掉这些消息(检查logger.setLevel(logging.DEBUG)是否为空)

在您的情况下,我只能想到后一种情况。

答案 1 :(得分:1)

sentry_sdk的django集成主动设置了记录程序以使其被忽略

ignore_logger("django.server")
ignore_logger("django.request")

https://github.com/getsentry/sentry-python/blob/master/sentry_sdk/integrations/django/init.py#L90