File size: 2,111 Bytes
076bd51 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | import logging
class MaxLevelFilter(logging.Filter):
"""
Filter that only allows log records up to a specified maximum level.
"""
def __init__(self, max_level):
super().__init__()
self.max_level = max_level
def filter(self, record):
# Only accept records whose level number is <= self.max_level
return record.levelno <= self.max_level
class LoggerManager:
_instance = None # Singleton instance
def __new__(cls):
if cls._instance is None:
cls._instance = super(LoggerManager, cls).__new__(cls)
cls._instance.logger = None
cls._instance.setup_logger()
return cls._instance
def setup_logger(self):
if self.logger is None:
self.logger = logging.getLogger("logger")
self.logger.setLevel(logging.INFO)
# 1) INFO handler
info_handler = logging.StreamHandler()
info_handler.setLevel(logging.INFO)
info_format = "[*] %(asctime)s - %(message)s"
info_datefmt = "%Y-%m-%d %H:%M:%S"
info_formatter = logging.Formatter(info_format, info_datefmt)
info_handler.setFormatter(info_formatter)
# Add a filter to exclude ERROR level (and above) messages
info_handler.addFilter(MaxLevelFilter(logging.INFO))
self.logger.addHandler(info_handler)
# 2) ERROR handler
error_handler = logging.StreamHandler()
error_handler.setLevel(logging.ERROR)
error_format = "[!] %(asctime)s - %(message)s"
error_datefmt = "%Y-%m-%d %H:%M:%S"
error_formatter = logging.Formatter(error_format, error_datefmt)
error_handler.setFormatter(error_formatter)
self.logger.addHandler(error_handler)
def info(self, message):
"""
Log an INFO-level message.
"""
self.logger.info(message)
def error(self, message):
"""
Log an ERROR-level message.
"""
self.logger.error(message)
logger = LoggerManager().logger
|