2013-10-10 56 views
0

我有一個簡單的自定義過濾器,只是將錯誤的日誌級別更改爲警告。該代碼是如何在Python和Django中登錄日誌過濾器?

import logging 

LOG = logging.getLogger(__name__) 

class MyErrorFilter(logging.Filter): 
    def filter(self, record): 
     if record.levelname == 'ERROR': 
      print 'get record', str(record), record.levelname, record.levelno 
      LOG.warn('check something') 
      record.levelname = 'WARNING' 
      record.levelno = logging.WARNING 
    return 1 

過濾效果很好,只是我的過濾器內部的LOG.warn(...)沒有。我可以看到打印的消息並查看更改的日誌級別,除了警告消息檢查了某些東西。這是預期的行爲還是我在這裏犯了錯誤?謝謝!

回答

0

不要從記錄代碼內部登錄,這就是Filter的本質 - 它是從記錄機器內部調用的。日誌記錄設計用於記錄應用程序和庫,但不記錄日誌記錄中發生的事情。我並不是說它永遠不會工作,但這不是一個好習慣。沒有足夠的信息能夠回答你的問題 - 例如,你的日誌配置沒有給出,所以沒有辦法告訴你爲什麼你的LOG.xxx不會產生任何輸出。