这些IOErrors是众所周知的,如其他SO线程(见下文)所示,并且可能是由用户在上传中间关闭浏览器引起的。有关没有简单解决方案的原因的讨论,请参阅this django-developers thread。
我首先尝试了对this ioerror SO thread的回答中描述的中间件选项(除了在我们的例子中,我将分支请求uri)。 它没有工作:我可以捕获响应并看到就Django而言,帖子中没有包含' ta文件,并且它返回了200响应验证错误。 然而,我仍然可以在Apache的错误日志中看到IOError。
接下来我们发现this discussion on a django bug,建议您使用记录过滤器来抑制此问题。我尝试将过滤器附加到我们的自定义记录器,根记录器和' 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
答案 0 :(得分:0)
最近有一些问题,现在在trunk / 1.4beta上将其作为UnreadablePostError
引发。请参阅https://code.djangoproject.com/ticket/17277和https://code.djangoproject.com/ticket/17069。您应该能够使用日志记录筛选器来抑制这些错误。 #17069中有一个例子。