有没有一种方法可以处理Pyramid Web应用程序中的某种“全部”错误处理?我目前已经对数据库实施了异常日志记录(通过http://docs.pylonsproject.org/projects/pyramid_cookbook/en/latest/logging/sqlalchemy_logger.html的文档),我会将消息返回给我的观点,为发生的事情提供一个“友好”的面孔。金字塔所有友好的异常处理
但是有什么我可以实现,会显示某种通用的“糟糕,你遇到了问题,我们正在研究它”为其他任何我没有明确捕获,我可以使用上述错误处理程序在幕后记录什么到数据库?或者,我应该在搜索中寻找什么样的东西?
感谢,
编辑,因为我不能适合所有到注释: 。 谢谢,这似乎正是我要找的!
有一件事我遇到,我不知道它是否相关或不....
所以我执行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异常。我认为这是因为我正在玩一些游戏,向辅助函数传递请求,这就是它似乎在抛出它的地方。所以它通过刷新会话来工作。 Buuuut会发生什么,如果我在异常视图中有一个log.error()语句,如果实际抛出异常,视图会捕获它(很棒!),但视图中的日志语句不会被提交。金字塔中的调试日志显示它正在写入,但从未提交。
如果我将日志记录处理程序更改回transaction.commit,那么异常做得到承诺,但我回到我原来的问题。我认为我需要重点关注我在帮助函数中做什么,这首先导致了它,但我仍然在学习SQLAlchemy。有时它可能有点奇怪。
很好!这将处理_any_异常发生_anywhere_视图可调用,正确?我可以在技术上只是再次抛出“exc”而不是返回响应?这种方法今天仍然推荐吗? – Jens