Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python logging add filter for handler in ini file?

I have a log.ini like this:

[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

But it dosen't work. And I don't want to dynamic add filter for the handler like handler.addFilter(logging.Filter('foo'))

My filter like this:

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

What I want to achieve? I want to use one logger and two different handler to write different level log into different files.

I aslo find " If you need to have instances of Filter in your logging configuration, you will need to use dictConfig() " in https://docs.python.org/2/library/logging.config.html.

like image 887
jiamo Avatar asked Oct 24 '25 17:10

jiamo


1 Answers

Seem like I can only do something like:

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 make ini like :

[handler_error]
class=misc.testfm.ErrorHandler
like image 139
jiamo Avatar answered Oct 26 '25 07:10

jiamo