有没有一种方法可以处理Pyramid Web应用程序中的某种“包罗万象”错误处理?目前,我已经实现了将异常日志记录到数据库中(通过http://docs.pylonsproject.org/projects/pyramid_cookbook/en/latest/logging/sqlalchemy_logger.html上的文档),并且我将消息返回到我的 View 中,以对发生的事情“友好”地对待。
但是有什么我可以实现的,可以显示某种通用的“糟糕,您遇到了问题,我们正在研究”,对于其他我没有明确发现的问题,我可以在后面使用上述错误处理程序场景将什么记录到数据库?或者,我应该在搜索中寻找什么样的东西?
谢谢,
编辑,因为我无法将其全部放入注释中:
。
谢谢,这似乎正是我要的!
我遇到的一件事,我不知道它是否相关...。
所以我像上面这样实现SQL记录器,如下所示:
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()
我必须取出'transaction.commit()'调用,而改用.flush(),因为使用事务时遇到了SQLAlchemy DetachedInstanceError异常。我认为这是因为我正在玩一些游戏,并将请求传递给辅助函数,而这似乎就是在抛出它。因此,它可以通过刷新 session 来工作。 Buuuut,会发生什么情况,如果我的异常 View 中有一个log.error()语句,如果实际上引发了异常,则该 View 会捕获该异常(很好!),但该 View 中的log语句没有被提交。 Pyramid中的调试日志显示它正在被写入,但是从未提交。
如果我将日志处理程序改回transaction.commit,则确实会提交异常,但我又回到了最初的问题。我想我需要重新关注最初导致它的辅助函数中正在执行的操作,但是总体上我仍在学习SQLAlchemy。有时可能有点奇怪。
最佳答案
您可以设置exception view。例如:
@view_config(context=Exception)
def error_view(exc, request):
#log or do other stuff to exc...
return Response("Sorry there was an error")
关于python - Pyramid 通用的友好异常处理,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13944852/