2017-03-21 130 views
1

我有這樣一個log.ini:Python日誌記錄爲ini文件中的處理程序添加過濾器?

[handler_info] 
class=StreamHandler 
level=INFO 
formatter=fmt 
filter=infofilter 
args=(sys.stdout,) 

[handler_error] 
class=StreamHandler 
level=ERROR 
filter=errorfilter 
formatter=fmt 
args=(sys.stdout,) 

[filter_infofilter] 
class=util.testfm.InfoFilter 

[filter_errorfilter] 
class=util.testfm.ErrorFilter 

但是這麼想的工作。我不想動態添加過濾器像handler.addFilter(logging.Filter('foo'))

我的過濾器這樣的處理程序:

class InfoFilter(logging.Filter): 

    def filter(self, rec): 
     return rec.levelno <= logging.INFO 


class ErrorFilter(logging.Filter): 

    def filter(self, rec): 
     return rec.levelno > logging.INFO 

我想實現什麼?我想用一個記錄器和兩個不同的處理程序將不同級別的日誌寫入不同的文件。

我也發現「如果你需要在你的日誌配置中有Filter的實例,你需要在https://docs.python.org/2/library/logging.config.html中使用dictConfig()」。

回答

0

看起來我只能這樣做:

class InfoHandler(StreamHandler): 
    def __init__(self, *args, **kwargs): 
     StreamHandler.__init__(self, *args, **kwargs) 
     self.addFilter(InfoFilter()) 


class ErrorHandler(StreamHandler): 
    def __init__(self, *args, **kwargs): 
     StreamHandler.__init__(self, *args, **kwargs) 
     self.addFilter(ErrorFilter()) 

添加使INI喜歡:

[handler_error] 
class=misc.testfm.ErrorHandler 
相關問題