gpt4 book ai didi

python - 如何在 TurboGears 2.2.2 的 RootController 中使用自定义 sys.excepthook

转载 作者:太空宇宙 更新时间:2023-11-03 11:31:42 25 4
gpt4 key购买 nike

我想在我的 TB 应用程序中将所有异常记录到日志文件中。因此,我尝试像往常一样使用自定义 sys.excepthook。但是仍然会引发每个异常并且不会记录任何内容。这是我的代码:

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

当我在 index 方法中引发 ValueError 时:

@expose('app.templates.index')
def index(self, **kwargs):
raise ValueError
return dict(page = 'index')

我的浏览器中仍然显示 WebError Traceback 页面,但没有任何记录。

你知道我做错了什么吗?有什么想法吗?

最佳答案

来自文档(http://docs.python.org/2/library/sys.html#sys.excepthook):

When an exception is raised and uncaught, the interpreter calls sys.excepthook [...] in a Python program this happens just before the program exits.

现在,由于 WebError 捕获了异常并进行了处理(您的应用程序甚至没有从此类异常中退出),异常没有达到调用 sys.excepthook 的程度。


对于一个快速但肮脏的解决方案,您可以尝试在您的配置中设置 full_stack = False 以禁用 WebError 中间件 (https://github.com/TurboGears/tg2/blob/tg2.2.2/tg/configuration/app_config.py#L1036) 这当然意味着您在您的网络服务器。

如果您只想记录异常但仍使用 WebError 调试/电子邮件功能,您可以设置一个自定义中间件,将其包装在您的应用程序中,记录异常并将其传递。

关于python - 如何在 TurboGears 2.2.2 的 RootController 中使用自定义 sys.excepthook,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18229248/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com