これらIOErrorsは、他のSOスレッド(下記参照)に見られるようにかなりよく知られており、そのブラウザ半ばアップロードを閉じるユーザによって引き起こされ得ます。単純な解決策がない理由については、this django-developers threadを参照してください。抑止ジャンゴのmod_wsgi IOErrors
私が最初に(我々の場合には、私がリクエストURIに分岐します除く)this ioerror SO threadへの答えで説明したミドルウェアオプションを試してみました。私は応答をキャプチャして、限りジャンゴが心配していたとして、ポストに含まれるファイルがなかったことを見ることができ、それは検証エラーと200レスポンスを返していました:それはを動作しませんでした。 そして、まだ、私はまだApacheのエラーログに例外IOErrorを見ることができます。
次は、ログフィルタを使用してこれを抑制する必要があることを示しているthis discussion on a django bugが見つかりました。私は私がまだ...私たちのカスタムロガー、ルートロガーと「django.request」にフィルターを取り付けてみました、それを抑制するためにはIOErrorを見ることができません!フォームの検証に失敗した場合にのみ、ログメッセージが表示されます。
提案がありますか?
は、[編集:ここに私のセットアップがある]
settings.pyで(ほとんどは、Djangoのconf/global_settings.py
からコピー):(明らかにちょうどテストの目的のために)ioerr_filter.pyの
DEBUG = False
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'filters': {
'ioerrsquash': {
'()': 'es.ioerr_filter.IOErrorFilter'
} },
'handlers': {
'mail_admins': {
'level': 'ERROR',
'class': 'django.utils.log.AdminEmailHandler',
'filters': ['ioerrsquash']
}
},
'loggers': {
'django.request': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': True,
},
'wsgi.errors': { # added this logger after django.request failed
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': True,
}
}
}
内容:
import logging
import sys
from django.conf import settings
class IOErrorFilter(logging.Filter):
def filter(self, record):
LOGF = "%s/BU_IOERR.log" % settings.LOG_FILE_DIR
f = open(LOGF, 'a')
f.write('... record\n')
f.write(str(record))
f.write('\n... exc_info\n')
f.write(str(sys.exc_info()))
f.write('\n...\n')
return True
おかげマークは、はい私は、ログフィルタのための私のテンプレートとして#17069を使用していました。私が言及したように、私はrootと2つの名前付きロガー(django.request)にフィルターを付けました - しかし、私はエラーが来るのを見ていません。私のテストでは、すべての条件を削除しました(例えば 'def filter(self、record):f = open( 'test.log'、 'a'); f.write(str(record))')... IOErrorではなく他のログメッセージを参照してください。 – EMiller
ロギングの設定とカスタムフィルタコードに関して試したことを投稿した場合は役に立ちます。 –
質問を編集しました、ありがとう – EMiller