我有一个普通的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错误。我做错了什么?
答案 0 :(得分: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
没有做任何事情,这只是删除了流处理程序,离开了哨兵处理程序,并导致basicConfig
作为否-op,意思是我们完全丢失了StreamHandler。
删除这些行并且只有一个setup_logging
和{{1}}来电。