The python logging package provides a Filter class that can be used for filtering log records. This is a simple way to ensure that a logger or handler will only output desired log messages. Here’s an example filter that only allows INFO messages to be logged:
import logging class InfoFilter(logging.Filter): def filter(self, rec): return rec.levelno == logging.INFO
Configuring Python Logging Filters
Filters can be added to a logger instance or a handler instance using the addFilter(filt) method. For a logger, the best time to do this is probably right after calling getLogger, like so:
log = logging.getLogger() log.addFilter(InfoFilter())
What about adding a filter to a handler? If you’re programmatically configuring handlers with addHandler(hdlr), then you can do the same thing by calling addFilter(filt) on the handler instance. But if you’re using fileConfig to configure handlers and loggers, it’s a little bit harder. Unfortunately, the logging configuration format does not support adding filters. And it’s not always clear which logger the handler instances are attached to in the logger hierarchy. So the simplest way to add a filter to a handler in this case is to subclass the handler:
class InfoHandler(logging.StreamHandler): def __init__(self, *args, **kwargs): StreamHandler.__init__(self, *args, **kwargs) self.addFilter(InfoFilter())
Then in your file config, make sure to set the class value for your custom handler to a complete code path for import:
[handler_infohandler] class=mypackage.mylogging.InfoHandler level=INFO
Now your handler will only handle the log records that pass your custom filter. As long your handlers aren’t changing much, the above method is much more reusable than having to call addFilter(filt)
everytime a new logger is instantiated.