【问题标题】:Why does this logger not create Sentry events?为什么这个记录器不创建哨兵事件?
【发布时间】:2019-10-21 02:44:21
【问题描述】:

我正在使用 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 的模块解决此问题?

【问题讨论】:

  • 通过设置传播为真?或将哨兵处理程序添加到您的处理程序(您只有“控制台”)
  • @dirkgroten 两个答案都无法解决问题。新的 sentry sdk 与 Raven 不同。

标签: python django logging sentry


【解决方案1】:

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

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

在你的情况下,我只能认为后一种情况适用。

【讨论】:

  • 好吧,它和乌鸦不一样。每天都在学习一些东西:)但我不明白你的答案。如果级别设置为 WARNING,那么它还会记录 ERROR 级别的消息。将其设置为 ERROR 有何不同?
  • 你说得对,那是我的脑残。我会删除我的答案。
  • 已更新且未删除的答案。我真的不知道 OP 的具体问题是什么,但这应该可以作为很好的通用故障排除指南。
  • @MarkusUnterwaditzer 这实际上是您在 django 集成中引入的更改;)
  • 感谢您解决这个问题。我知道这可能会造成令人困惑的行为,但我希望你能理解我为什么首先这样做。
【解决方案2】:

是 sentry_sdk 的 django 集成主动设置 logger 被忽略

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

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

【讨论】:

  • 啊,是的。不要将这些记录器用于任何重要的事情:) 这个记录器上有太多垃圾错误,进行更复杂的过滤可能意味着我必须对日志消息应用正则表达式。
  • @MarkusUnterwaditzer 不介意,但我至少会在文档中明确说明或参数默认为忽略它们。本来可以为我省下不少麻烦;)无论如何,感谢您的快速反馈!
猜你喜欢
  • 2020-12-03
  • 1970-01-01
  • 1970-01-01
  • 2012-04-03
  • 2021-11-09
  • 1970-01-01
  • 2016-04-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多