Tar*_*kyi 5 python error-logging views pyramid
任务:当我的一个视图中发生错误时,我需要显示自定义错误视图.错误类型无关紧要.
我尝试通过registring查看所有异常来覆盖所有异常,如下所示:
<view
context="Exception"
renderer="server_error.pt"
/>
Run Code Online (Sandbox Code Playgroud)
它运作良好.所有例外都显示了我的观点.但问题是那些错误停止了记录.在我的错误视图中,我可以执行类似logger.error(traceback)的操作,但这是一个愚蠢的想法.
如何在不破坏日志记录金字塔系统的情况下为所有错误注册视图.
您可以通过普通的旧 python 日志记录在视图中记录错误。或者将响应的状态设置为 500(假设您的视图现在返回状态 200,这表示响应成功)。
编辑:工作示例
我不是日志记录专家,但我的印象是,您在development.ini/Production.ini中的日志记录配置会被采纳,下面的示例似乎证明了这一点,但您是判断者......
更改默认日志配置
[formatter_generic]
# format = %(asctime)s %(levelname)-5.5s [%(name)s][%(threadName)s] %(message)s
format = y u no work??!!?? %(message)s
# End logging configuration
Run Code Online (Sandbox Code Playgroud)
观点
from pyramid.view import view_config
from webob import Response
import logging
log = logging.getLogger(__name__)
@view_config(route_name='home', renderer='templates/mytemplate.pt')
def my_view(request):
raise ValueError("oops")
return {'project':'tstLogError'}
@view_config(context=Exception)
def exception_view(context, request):
log.error("The error was: %s" % context, exc_info=(context))
return Response(status_int=500, body=str(context))
from pyramid.view import view_config
from webob import Response
Run Code Online (Sandbox Code Playgroud)
控制台输出:
serving on http://0.0.0.0:6543
y u no work??!!?? The error was: oops
Traceback (most recent call last):
File "/home/twillis/projects/TestLogError/local/lib/python2.7/site-packages/pyramid/tweens.py", line 20, in excview_tween
response = handler(request)
File "/home/twillis/projects/TestLogError/local/lib/python2.7/site-packages/pyramid/router.py", line 164, in handle_request
response = view_callable(context, request)
File "/home/twillis/projects/TestLogError/local/lib/python2.7/site-packages/pyramid/config/views.py", line 333, in rendered_view
result = view(context, request)
File "/home/twillis/projects/TestLogError/local/lib/python2.7/site-packages/pyramid/config/views.py", line 471, in _requestonly_view
response = view(request)
File "/home/twillis/projects/TestLogError/tstLogError/tstlogerror/views.py", line 8, in my_view
raise ValueError("oops")
ValueError: oops
Run Code Online (Sandbox Code Playgroud)
