如何在Tornado中设置自定义未处理的异常处理程序?

eig*_*ein 5 python tornado web

我正在尝试通过覆盖tornado.web.Application._handle_request_exception方法来实现自定义未处理的请求异常日志记录:

def _handle_request_exception(self, e):
    logging.error('error')  # Just for test.
Run Code Online (Sandbox Code Playgroud)

但我看到相同的日志输出,如:

2012-09-01 03:35:09,947 [7399] root ERROR: Uncaught exception GET / (127.0.0.1)
HTTPRequest(...)
Traceback (most recent call last):
Run Code Online (Sandbox Code Playgroud)

而不是我的自定义消息.我究竟做错了什么?

Col*_*ean 7

嗯,首先,_handle_request_exception方法是RequestHandler,而不是Application.

其次,您不能使用主命名空间中的新定义覆盖绑定方法:

def _handle_request_exception(self, e):
    logging.error('error')
Run Code Online (Sandbox Code Playgroud)

您需要为RequestHandler该类创建子类:

class BaseHandler(tornado.web.RequestHandler):
    def _handle_request_exception(self, e):
        logging.error('error')
Run Code Online (Sandbox Code Playgroud)

然后你的所有处理程序都应继承BaseHandler.