| 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): |
| |
| return record.levelno <= self.max_level |
|
|
|
|
| class LoggerManager: |
| _instance = None |
|
|
| 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) |
|
|
| |
| 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) |
|
|
| |
| info_handler.addFilter(MaxLevelFilter(logging.INFO)) |
|
|
| self.logger.addHandler(info_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 |
|
|