2014-04-19 13 views
2

比方說,我想有幾個處理程序,但我不想logging.ERROR級別的消息在任何文件中顯示,除了logs/error.log設置日誌到MIN和MAX的水平,以排除錯誤

formatter = logging.Formatter('%(asctime)s %(levelname)s: %(message)s', datefmt='%m/%d %H:%M:%S') 

handler = RotatingFileHandler('logs/debug.log', maxBytes=100000, backupCount=1) 
handler.setLevel(logging.DEBUG) 
handler.setFormatter(formatter) 

error_handler = RotatingFileHandler('logs/error.log', maxBytes=100000, backupCount=1) 
error_handler.setFormatter(formatter) 
error_handler.setLevel(logging.ERROR) 

app.logger.addHandler(handler) 
app.logger.addHandler(error_handler) 

所以假設我想要處理程序來處理從logging.DEBUG直到幷包括logging.WARNING的所有內容,但不包括logging.ERROR。這可能嗎?

回答

1

您可以指定一個自定義logging filter篩選出有水平的記錄,你並不需要:使用addFilter()

class LevelFilter(object): 
    def __init__(self, level): 
     self.level = level 

    def filter(self, record): 
     return record.levelno != self.level 

然後你就可以將過濾器添加到處理程序:

handler = RotatingFileHandler('logs/debug.log', maxBytes=100000, backupCount=1) 
handler.setLevel(logging.DEBUG) 
handler.setFormatter(formatter) 
handler.addFilter(LevelFilter(logging.ERROR)) 

在在這種情況下,您不會在debug.log中看到ERROR級別的消息。

另見:

希望這是你所需要的。