2011年1月29日 星期六

在 Django 發生 exception 時記錄相關訊息

官網文件可知, views 裡發生任何 exception 時, Django 會執行 handler500, 所以在 urls.py 裡設自己的 handler500 就可以攔截所有 500 server error, 接著就是如何取得 exception 內容。後來看到 ticket #4007 才知道可以從 sys.exc_info 裡取得相關資訊。後來想想, 這表示 logging.exception() 應該已包好對應的操作, 所以做法相當簡單:
  • 改 urls.py 加入自己的 handler500
  • 在 handler500 裡先呼叫 logging.exception(MESSAGE)
  • 再讀入自己的 500.html, 回傳結果
附帶一提, 404 的行為也值得一看, 可以參考內建的 404 handler 自己寫一份, 方便記錄查不到的頁面。官網建議改 template 就好, 不要自己寫 handler404, 不過我覺得複制程式碼, 指定到自己的 handler, 日後方便加東西。

其餘 views 在找不到頁面時, 直接 raise http.Http404(), 就會進入 handler404。當 settings.DEBUG = False 時, url routes 找不到對應的 url 時也會呼叫 handler404。

    沒有留言:

    張貼留言

    在 Fedora 下裝 id-utils

    Fedora 似乎因為執行檔撞名,而沒有提供 id-utils 的套件 ,但這是使用 gj 的必要套件,只好自己編。從官網抓好 tarball ,解開來編譯 (./configure && make)就是了。 但編譯後會遇到錯誤: ./stdio.h:10...