Django Middleware で Traceback をコンソールに出力する

Django は、コンソールにデバッグ情報を出力してくれません(クリティカルなエラーは除く)。普通に開発している分には、ブラウザに表示される Traceback が充実しているので十分なのですが、API などブラウザ以外からリクエストが飛んでくるアプリケーションを開発している場合に、かなり不便なので Middleware を使ってコンソールに Traceback を出力するようにします。

まず、以下を middleware.py としてプロジェクト直下に保存。 request オブジェクトの内容も出力したい場合は、コメントを外します。

import traceback
import sys

class TracebackMiddleware():
    def process_exception(self, request, exception):
        print '######################## Exception ##################'
        print '\n'.join(traceback.format_exception(*sys.exc_info()))
        #print '-----------------------------------------------------'
        #print repr(request)
        print '#####################################################'

settings.py に ConsoleExceptionMiddleware の設定を追加。

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.middleware.doc.XViewMiddleware',
    'myapp.middleware.ConsoleExceptionMiddleware',
)

これでプログラム中でエラーが発生した際に manage.py を実行しているコンソールに Traceback 情報が表示されるようになります。以下サンプル。

関連リンク:
Django snippets: Middleware for printing of exception to console



このエントリーのはてなブックマーク (-)