これを使用して、カスタムミドルウェアクラスのprocess_exception()メソッド内にhtmlログファイルを生成したいと思います。例:
- 例外がキャッチされました。
- process_exception(request)が呼び出されました。
- process_exceptionは、デフォルトのエラーhtmlを返す関数を呼び出します。
- process_exceptionは、返されたhtmlをdjangoサーバーが実行されているログフォルダーに書き込みます。
Djangoがこれらの例外のメールを送信できることは知っていますが、これは使用したくありません。私はJSONを使用してRESTfulアプリケーションに取り組んでいるので、エラー500を示すjson文字列を返し、htmlを別の場所に配置する方が適切だと感じています。
前もって感謝します。
申し訳ありませんが、明確にする必要があります。独自の500.htmlを作成したくないので、Debug=Trueの場合にdjangoが使用するものを使用します。つまり、エラーファイルを生成し、ログフォルダに配置します。
助けてくれたMarkに感謝します-興味のある人のための私の解決策は次のとおりです。
import logging
import os
import settings
import sys
import datetime
from response import get_json_response
from django.views.debug import ExceptionReporter
logging.config.dictConfig(settings.LOGGING)
LOGGER = logging.getLogger('console_logger')
class LoggingMiddleware(object):
def process_exception(self,request,exception):
exc_type, exc_value, exc_traceback = sys.exc_info()
er = ExceptionReporter(request, exc_type, exc_value, exc_traceback)
time = str(datetime.datetime.now())
file_path = os.path.join(settings.LOG_FOLDER, "{}.html".format(time))
LOGGER.error("Writing error 500 traceback to %s" % file_path)
file_handle = open(file_path,'w')
file_handle.write(er.get_traceback_html())
file_handle.close()
return get_json_response(500,"HTTP Error 500: Internal Server Error")
このコードは、例外をインターセプトし、sysモジュールとdjangosのデフォルトエラーテンプレートを使用して、適切にフォーマットされたトレースバック/例外情報ページを生成し、これをログフォルダーに配置してから、httpエラー500が発生したことを示すJSONオブジェクトを返します。