Python 为什么这个记录器不创建哨兵事件?
我正在使用django和sentry sdk。在我的django设置的记录器部分,我有以下处理程序:Python 为什么这个记录器不创建哨兵事件?,python,django,logging,sentry,Python,Django,Logging,Sentry,我正在使用django和sentry sdk。在我的django设置的记录器部分,我有以下处理程序: 'loggers': { 'django.request': { 'level': 'WARNING', 'handlers': ['console', ], 'propagate': False } } sentry
'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
的模块,我如何解决此问题?一般来说,我有三种方法可以认为日志消息不能变成事件:
参数设置得太高(默认情况下为错误,doevent\u level
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不介意,但我至少会在文档中明确说明,或者使用默认参数忽略它们。会帮我省下不少麻烦;)无论如何,谢谢你的快速反馈!