The code example from given url shows return logRecord.levelno <= self.__level
. I think, you need a ==
for your use case (or to allow only one level to be more exact, i.e. also works for info level only):
import logging
# A simple formatting configuration with output to a file
logging.basicConfig(
format="%(asctime)s :: %(name)s :: %(levelname)s :: %(message)s",
datefmt="%Y-%m-%d %H:%M:%S", filename="output.log", filemode="a",
level=logging.DEBUG # allow everything and filter later
)
logger = logging.getLogger(name="Filtered")
class MyFilter:
def __init__(self, level):
self.__level = level
def filter(self, logRecord):
return logRecord.levelno == self.__level
logger.debug("This should be written (before applying filter)")
logger.info("This should be written (before applying filter)")
logger.warning("This should be written (before applying filter)")
logger.error("This should be written (before applying filter)")
logger.critical("This should be written (before applying filter)")
logger.addFilter(MyFilter(logging.INFO))
logger.debug("This should not be written, because levelno != debug")
logger.info("This should be written, because levelno == info") # <--- !
logger.warning("This should not be written, because levelno != warning")
logger.error("This should not be written, because levelno != error")
logger.critical("This should not be written, because levelno != critical")
outputs as configured to file output.log
with this content:
2023-07-04 20:21:10 :: Filtered :: DEBUG :: This should be written (before applying filter)
2023-07-04 20:21:10 :: Filtered :: INFO :: This should be written (before applying filter)
2023-07-04 20:21:10 :: Filtered :: WARNING :: This should be written (before applying filter)
2023-07-04 20:21:10 :: Filtered :: ERROR :: This should be written (before applying filter)
2023-07-04 20:21:10 :: Filtered :: CRITICAL :: This should be written (before applying filter)
2023-07-04 20:21:10 :: Filtered :: INFO :: This should be written, because levelno == info
In your case it will be logger.addFilter(MyFilter(logging.DEBUG))
of course.