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

时间:2013-03-28 02:41:38

标签: python logging sentry raven

我有一个普通的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.debuglogging.error - 正在被抑制。

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

1 个答案:

答案 0 :(得分:3)

事实证明这是一个草率的代码。我们在启动执行路径的其他地方有一些黑客重新初始化日志记录:

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

但是,如果logging.basicConfiglogging.root现有的处理程序,basicConfig没有做任何事情,这只是删除了流处理程序,离开了哨兵处理程序,并导致basicConfig作为否-op,意思是我们完全丢失了StreamHandler。

删除这些行并且只有一个setup_logging和{{1}}来电。