有沒有一種方法可以處理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