我有一个普通的
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.root.removeHandler(logging.root.handlers[0]) # Undo prevIoUs basicConfig logging.basicConfig(format='same long format',level=logging.DEBUG)
但是,由于如果logging.root具有现有处理程序,logging.basicConfig不执行任何操作,这只是删除了流处理程序,离开了sentry处理程序,并导致basicConfig然后充当no-op,这意味着我们完全丢失了StreamHandler.