python - Raven 的 SentryHandler 正在抑制 StreamHandler 输出到文件

标签 python logging sentry raven

我有一个普通的 python(非 Django)项目,我正在尝试 tie Raven into the logging setup .

在我们当前的设置下,我们使用一个简单的日志配置:

import logging
logging.basicConfig(format='long detailed format',
                    level=logging.DEBUG)

然后输出被重定向到一个日志文件;这会生成一个漂亮、详细的日志,我们可以在需要时查看。

我们现在想要添加 Raven 的错误日志记录,将其绑定(bind)到我们当前的日志记录设置中,以便 logging.error 调用 also 导致将消息发送到 Sentry 服务器.使用以下代码:

from raven import Client
from raven.conf import setup_logging
from raven.handlers.logging import SentryHandler

raven = Client(environ.get('SENTRYURL', ''), site='SITE')
setup_logging(SentryHandler(raven, level=logging.ERROR))

错误已成功发送到 Sentry,但我现在只得到一行文件输出:

DEBUG: Configuring Raven for host: <DSN url>

所有其他文件输出——从 logging.debuglogging.error——都被抑制了。

如果我注释 setup_logging 行,我得到文件输出但没有 Sentry 错误。我做错了什么?

最佳答案

事实证明这是一个草率的代码案例。我们在重新初始化日志记录的启动执行路径中的其他地方进行了一些修改:

logging.root.removeHandler(logging.root.handlers[0]) # Undo previous basicConfig
logging.basicConfig(format='same long format',
                    level=logging.DEBUG)

但是,如果 logging.root 有现有的处理程序,由于 logging.basicConfig 不做任何事情,这只是简单地删除了流处理程序,留下 Sentry 处理程序,并导致basicConfig 然后充当空操作,这意味着我们完全失去了 StreamHandler。

删除这些行,只有一个 basicConfig 和一个 setup_logging 调用有效。

关于python - Raven 的 SentryHandler 正在抑制 StreamHandler 输出到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15673338/

相关文章:

sentry - Sentry for React 应用程序中的事务应该是什么

java - jBOSS+ ESAPI java.lang.ClassCastException : org. jboss.logmanager.log4j.BridgeLogger 无法转换为 org.owasp.esapi.Logger

grails - Slf4j 注释可以在 Grails 中工作吗?

python - pandas 数据框中的新列基于带有条件列表的现有列值

python - 使用setup.py创建python开发环境(virtualenv)

c# - EnterpriseLibrary 记录到数据库不起作用

Dockerfile 环境变量

android - Sentry 跟踪移动设备操作系统,设备 - 应该如何指定 header 才能使其正常工作?

python - 使用 pandas 和 openpyxl : Repaired Part:/xl/worksheets/sheet1. xml 部分时出现 Excel 错误,并出现 XML 错误。 HRESULT 0x8000ffff 第 1 行,第 0 列

python - 使用随机放置的 NaN 创建示例 numpy 数组