在 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。

    留言

    這個網誌中的熱門文章

    (C/C++ ) 如何在 Linux 上使用自行編譯的第三方函式庫

    熟悉系統工具好處多多

    virtualbox 使用 USB 裝置