Got some problems when using logging Filter

Peter Otten __peter__ at web.de
Wed Nov 16 09:50:51 EST 2011


sword wrote:

> Thanks for your reply. I tried to edit the source a bit, now the
> main.py looks like this:
> #main.py
> import logging
> from logging import Filter
> import a
> import b
> 
> logging.basicConfig(level=logging.DEBUG)
> root = logging.getLogger()
> root.addFilter(Filter("GoneWithTheWind")) #so I suppose no log msg
> would pass this filter
> 
> logger = logging.getLogger("main")
> logger.debug("main process")
> a.print_log()
> b.print_log()
> 
> ####
> And It still prints out all the log msg. :(

Here's a little demo to explore how filtering works:

$ cat demo.py
import logging
class Filter(logging.Filter):
    def filter(self, record):
        print "applying filter", self.name
        return True

logging.basicConfig()

loggers = [logging.getLogger(path) for path in ["", "a", "a.b"]]
for logger in loggers:
    logger.addFilter(Filter("filter@" + logger.name))

[handler] = logging.getLogger().handlers
handler.addFilter(Filter("filter at handler"))

for logger in loggers:
    logger.critical("whatever")
$ python demo.py
applying filter filter at root
applying filter filter at handler
CRITICAL:root:whatever
applying filter filter at a
applying filter filter at handler
CRITICAL:a:whatever
applying filter filter at a.b
applying filter filter at handler
CRITICAL:a.b:whatever
$

As you can infer from the output only the filter(s) of the original logger 
and of the handler(s) are applied.






More information about the Python-list mailing list