2017-03-21 2 views
1

Ich habe eine log.ini wie folgt aus:Python Logging Filter für Handler in Ini-Datei hinzufügen?

[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 

Aber es dosen't Arbeit. Und ich will nicht, um dynamische Add-Filter für den Handler wie handler.addFilter(logging.Filter('foo'))

Mein Filter wie folgt aus:

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 

Was ich erreichen will? Ich möchte einen Logger und zwei verschiedene Handler verwenden, um verschiedene Level-Logs in verschiedene Dateien zu schreiben.

Ich finde auch "Wenn Sie Instanzen von Filter in Ihrer Protokollierungskonfiguration benötigen, müssen Sie dictConfig()" in https://docs.python.org/2/library/logging.config.html verwenden.

Antwort

0

Scheinen, wie ich nur so etwas wie tun:

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()) 

Add machen ini mag:

[handler_error] 
class=misc.testfm.ErrorHandler