Python 抑制Django mod_wsgi IOErrors
这些IOR错误是众所周知的,正如在其他SO线程(见下文)中所看到的那样,可能是由于用户在上传过程中关闭浏览器造成的。有关为什么没有简单解决方案的讨论,请参阅 我首先尝试了在对的回答中描述的中间件选项(在本例中除外,我将在请求uri上进行分支)。它不起作用:我可以捕获响应,并看到就Django而言,帖子中没有包含文件,它返回了一个带有验证错误的200响应。然而,我仍然可以在Apache的错误日志中看到IOError 接下来我们发现,这表明您应该使用日志记录过滤器来抑制这种情况。我尝试将过滤器附加到我们的自定义记录器、根记录器和“django.request”。。。我还是看不到IOError来抑制它!我只能看到与表单验证失败相关的日志消息 有什么建议吗 [编辑:这是我的设置] 在settings.py(主要是从Django的Python 抑制Django mod_wsgi IOErrors,python,django,apache,mod-wsgi,Python,Django,Apache,Mod Wsgi,这些IOR错误是众所周知的,正如在其他SO线程(见下文)中所看到的那样,可能是由于用户在上传过程中关闭浏览器造成的。有关为什么没有简单解决方案的讨论,请参阅 我首先尝试了在对的回答中描述的中间件选项(在本例中除外,我将在请求uri上进行分支)。它不起作用:我可以捕获响应,并看到就Django而言,帖子中没有包含文件,它返回了一个带有验证错误的200响应。然而,我仍然可以在Apache的错误日志中看到IOError 接下来我们发现,这表明您应该使用日志记录过滤器来抑制这种情况。我尝试将过滤器附加到
conf/global_settings.py
)中:
ioerr_filter.py的内容(显然仅用于测试目的):
最近出现了一些问题,在trunk/1.4beta上这是一个
无法读取的PostError
。见和。您应该能够使用日志过滤器来抑制这些错误。#17069中有一个例子。谢谢Mark,是的,我使用#17069作为日志过滤器的模板。正如我提到的,我将过滤器附加到root和两个命名的记录器(django.request)上,但我没有看到错误出现。在我的测试中,我删除了所有条件(例如,def过滤器(self,record):f=open('test.log','a');f.write(str(record))
)。。。我看到了其他日志消息,但没有IOError。如果您发布了您在日志配置和自定义筛选代码方面所做的尝试,这将非常有用。
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