Pet*_*ell 11 python exception-handling pyramid
有没有办法在Pyramid Web应用程序中处理某种"全能"错误处理?我目前已经实现了异常日志记录到数据库(通过http://docs.pylonsproject.org/projects/pyramid_cookbook/en/latest/logging/sqlalchemy_logger.html上的文档),我会将消息返回到我的视图中事情的"友好"面对.
但有没有我可以实现的东西会显示某种通用的"哎呀,你遇到了一个问题而我们正在调查它",因为我没有明确地捕捉任何其他东西,我可以使用上面的错误处理程序场景记录到数据库的任何内容?或者,我应该在搜索中寻找什么样的东西?
谢谢,
编辑,因为我无法将其全部纳入评论:.谢谢,这似乎正是我正在寻找的!
我遇到的一件事,我不知道它是否相关......
所以我正如上面那样实现SQL logger:
class SQLAlchemyHandler(logging.Handler):
# A very basic logger that commits a LogRecord to the SQL Db
def emit(self, record):
trace = None
exc = record.__dict__['exc_info']
if exc:
trace = traceback.format_exc(exc)
log = Log(
logger=record.__dict__['name'],
level=record.__dict__['levelname'],
trace=trace,
msg=record.__dict__['msg'],)
DBSession.add(log)
DBSession.flush()
#transaction.commit()
Run Code Online (Sandbox Code Playgroud)
我不得不取出'transaction.commit()'调用,而是使用.flush(),因为我在使用事务时遇到了SQLAlchemy DetachedInstanceError异常.我认为这是因为我正在玩一些游戏,将请求传递给帮助函数,而这似乎是抛出它的地方.所以它通过刷新会话来工作.Buuuut,如果我在异常视图中有一个log.error()语句会发生什么,如果实际抛出了一个异常,那么视图捕获它(太棒了!)但是视图中的日志语句没有被提交.Pyramid中的调试日志显示它正在写入,但从未提交.
如果我将日志记录处理程序更改回transaction.commit,那么异常会被提交,但我回到原来的问题.我想我需要重点关注我在帮助函数中所做的事情,而这正是首先引起它的问题,但我仍然在学习SQLAlchemy.有时它可能有点奇怪.
Bri*_*jes 12
您可以设置例外视图.例如:
@view_config(context=Exception)
def error_view(exc, request):
#log or do other stuff to exc...
return Response("Sorry there was an error")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3041 次 |
| 最近记录: |