我有一个普通的python(非django)项目,我试图将Raven绑定到日志设置中。
在当前的设置中,我们使用一个简单的日志配置:
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))
错误被成功地发送到哨兵,但我现在只得到一行文件输出:
DEBUG: Configuring Raven for host: <DSN url>
所有其他文件输出——从logging.debug
到logging.error
——被抑制。
如果我注释setup_logging
行,我得到文件输出,但没有哨兵错误。我做错了什么?
这是一个草率的代码。我们在启动执行路径的其他地方做了一些修改,重新初始化了日志记录:
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
调用工作。