2012-02-22 94 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