Python 为什么这个记录器不创建哨兵事件?

Python 为什么这个记录器不创建哨兵事件?,python,django,logging,sentry,Python,Django,Logging,Sentry,我正在使用django和sentry sdk。在我的django设置的记录器部分,我有以下处理程序: 'loggers': { 'django.request': { 'level': 'WARNING', 'handlers': ['console', ], 'propagate': False } } 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],                           
)                                                                                 
但是,以下示例不会向sentry发送错误事件

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
的模块,我如何解决此问题?

一般来说,我有三种方法可以认为日志消息不能变成事件:

  • event\u level
    参数设置得太高(默认情况下为错误,do
    init(集成=[LoggingIntegration(event\u level=logging.DEBUG)])
  • 您的记录器的级别太高(do
    logger.setLevel(logging.DEBUG)
  • 您的记录器有一个过滤器,可以过滤掉这些消息(检查
    logger.filters
    中是否有空)

在您的情况下,我只能考虑后一种情况。

是sentry_sdk的django集成主动将记录器设置为忽略

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

通过将propagate设置为true?或将sentry处理程序添加到您的处理程序中(您只有“控制台”)@dirkgroten这两个答案都不能解决问题。新的sentry sdk的工作方式与Raven不同。好吧,它与Raven不同。每天都在学习:)但我不理解您的答案。如果级别设置为警告,则它还会记录错误级别消息。把它设置成错误会有什么不同呢?你是对的,那是我的愚蠢之举。我将删除我的答案。已更新和未删除的答案。我真的不知道OP的具体问题是什么,但这应该是一个很好的通用故障排除指南。@MarkusInterwaditzer它实际上是您在django集成中引入的一个更改;)谢谢你弄明白了。我明白这是多么令人困惑的行为,但我希望你能理解我当初为什么这么做。啊,是的。不要将这些记录器用于任何重要的事情:)此记录器上有太多垃圾错误,执行更复杂的筛选可能意味着我必须对日志消息应用正则表达式。@MarkusInterwaditzer不介意,但我至少会在文档中明确说明,或者使用默认参数忽略它们。会帮我省下不少麻烦;)无论如何,谢谢你的快速反馈!