2012-02-22 99 views
1

这些IO错误是众所周知的,正如在其他SO线程中看到的(见下文),并且可能是由用户在浏览器中间关闭时导致的。有关为什么没有简单解决方案的讨论,请参见this django-developers thread抑制Django mod_wsgi IO错误

我第一次尝试了在this ioerror SO thread的回答中描述的中间件选项(除了在我们的情况下,我会在请求uri上分支)。 它没有工作:我可以捕捉到响应,并看到就Django而言,文章中没有包含文件,并且它返回了带有验证错误的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 

回答

0

还有更近期的问题,现在在trunk/1.4beta上将其作为UnreadablePostError提出。见https://code.djangoproject.com/ticket/17277https://code.djangoproject.com/ticket/17069。您应该能够使用日志过滤器来抑制这些错误。 #17069中有一个例子。

+0

感谢马克,是的,我用#17069作为日志过滤器的模板。正如我所提到的,我将过滤器附加到root和两个命名记录器(django.request) - 但我没有看到错误消失。在我的测试中,我删除了所有条件(例如'def filter(self,record):f = open('test.log','a'); f.write(str(record))')...和I查看其他日志消息,但不是IOError。 – EMiller 2012-02-22 17:06:30

+0

如果您发布了您在日志配置和自定义过滤器代码方面尝试过的内容,这将会很有帮助。 – 2012-02-22 18:07:06

+0

编辑的问题,谢谢 – EMiller 2012-02-23 14:45:35