5

我有一个普通的 python (non-Django) 项目,我试图将 Raven 绑定到 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行,我会得到文件输出但没有哨兵错误。我究竟做错了什么?

4

1 回答 1

3

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

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

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

删除这些行并且只有一个basicConfig和一个setup_logging电话有效。

于 2013-03-28T15:48:42.153 回答