我有一个普通的 python(非 Django)项目,我正在尝试 tie Raven into the logging setup .
在我们当前的设置下,我们使用一个简单的日志配置:
import logging
logging.basicConfig(format='long detailed format',
level=logging.DEBUG)
然后输出被重定向到一个日志文件;这会生成一个漂亮、详细的日志,我们可以在需要时查看。
我们现在想要添加 Raven 的错误日志记录,将其绑定(bind)到我们当前的日志记录设置中,以便 logging.error
调用 also 导致将消息发送到 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
然后充当空操作,这意味着我们完全失去了 StreamHandler。
删除这些行,只有一个 basicConfig
和一个 setup_logging
调用有效。
关于python - Raven 的 SentryHandler 正在抑制 StreamHandler 输出到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15673338/