Эти ошибки ввода-вывода довольно хорошо известны, как видно из других потоков SO (см. Ниже), и могут быть вызваны тем, что пользователь закрывает браузер во время загрузки. Для обсуждения того, почему не существует простого решения, см. эту ветку django-developers .
Сначала я попробовал опцию промежуточного программного обеспечения, описанную в ответе на этот поток ioerror SO (за исключением нашего случая, я бы выполнил ответ на запрос uri). Это не сработало : я мог зафиксировать ответ и увидеть, что в отношении Django не было файла, включенного в сообщение, и он возвращал ответ 200 с ошибкой проверки. И все же , я все еще вижу IOError в журнале ошибок Apache.
Затем мы нашли это обсуждение ошибки django , которая предлагает вам подавить это с помощью фильтра Logging . Я попытался прикрепить фильтр к нашему настраиваемому регистратору, корневому регистратору и django.request ... Я все еще не могу увидеть IOError, чтобы подавить его! Я вижу только сообщения журнала, связанные с неудачной проверкой формы.
Есть предложения?
[Редактировать: вот мои настройки]
В settings.py (в основном, скопировано с Django's conf/global_settings.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,
}
}
}
Содержимое ioerr_filter.py (очевидно, только для целей тестирования):
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