Python 如何在TurboGears 2.2.2中的RootController中使用自定义sys.excepthook
我想在我的TB应用程序中将所有异常记录到日志文件中。所以,我尝试像往常一样使用自定义sys.excepthook。但是仍然会引发每个异常,并且不会记录任何内容。这是我的密码:Python 如何在TurboGears 2.2.2中的RootController中使用自定义sys.excepthook,python,logging,turbogears,Python,Logging,Turbogears,我想在我的TB应用程序中将所有异常记录到日志文件中。所以,我尝试像往常一样使用自定义sys.excepthook。但是仍然会引发每个异常,并且不会记录任何内容。这是我的密码: class RootController(BaseController): secc = SecureController() error = ErrorController() def __init__(self): self.installExceptHook()
class RootController(BaseController):
secc = SecureController()
error = ErrorController()
def __init__(self):
self.installExceptHook()
super(RootController, self).__init__()
def installExceptHook(self):
def exceptHook(type, value, tb):
logger = logging.getLogger('app')
logger.critical(''.join(traceback.format_exception(type, value, tb)))
sys.excepthook = exceptHook
当我在索引方法中提出ValueError时:
@expose('app.templates.index')
def index(self, **kwargs):
raise ValueError
return dict(page = 'index')
我仍然在浏览器中获得WebError回溯页面,并且没有记录任何内容
你知道我做错了什么吗?有什么想法吗?来自文档():
当引发异常并取消捕获时,解释器调用
sys.excepthook[…]在Python程序中,这发生在
程序退出
现在,由于WebError捕获并处理异常(您的应用程序甚至没有从此类异常中退出),因此异常不会到达调用sys.excepthook
的点
对于快速而肮脏的解决方案,您可以尝试在配置中设置
full\u stack=False
以禁用WebError中间件(),这当然意味着您可以在Web服务器中处理故障响应代码
如果您只想记录异常,但仍然使用WebError调试/电子邮件功能,您可以设置一个自定义中间件,将其包装在应用程序中,记录异常并将其传递。谢谢。我担心会有一些TurboGears中间件。@nu.frix在我寻找答案时,我总是发现挖掘TG源代码很有帮助!有时它们非常鼓舞人心:我尝试了好几次,但并不总是成功:)当我被“重定向”到第五个文件时,我放弃了:D