加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – Raven的SentryHandler将StreamHandler输出抑制为文件

发布时间:2020-12-16 21:40:51 所属栏目:Python 来源:网络整理
导读:我有一个普通的 python(非Django)项目,我正在尝试 tie Raven into the logging setup. 在我们当前的设置下,我们使用简单的日志配置: import logginglogging.basicConfig(format='long detailed format',level=logging.DEBUG) 然后将输出重定向到日志文件;这
我有一个普通的 python(非Django)项目,我正在尝试 tie Raven into the logging setup.

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

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

然后将输出重定向到日志文件;这会产生一个很好的,详细的日志,我们可以在需要时查看.

我们现在想要添加Raven的错误日志记录,将其绑定到我们当前的日志记录设置中,以便logging.error调用也会导致将消息发送到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.debug到logging.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然后充当no-op,这意味着我们完全丢失了StreamHandler.

删除这些行并只有一个basicConfig和setup_logging调用工作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读