1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- import logging
- from logging.handlers import RotatingFileHandler
- class KeywordFilter(logging.Filter):
- def __init__(self, keywords):
- super().__init__()
- self.keywords = keywords
- def filter(self, record):
- return not any(keyword in record.getMessage() for keyword in self.keywords)
- class LogUtil:
- _instance = None # 私有类变量,用于存储唯一实例
- def __new__(cls, logFilePath: str, logFormatString: str, maxBytes:int=10*1024*1024, backupCount:int=5):
- if cls._instance is None:
- cls._instance = super(LogUtil, cls).__new__(cls)
- cls._instance.init_logger(logFilePath, logFormatString)
- return cls._instance
- def init_logger(self, logFilePath: str, logFormatString: str, maxBytes:int=10*1024*1024, backupCount:int=5):
- self.logger = logging.getLogger('log')
- self.logger.setLevel(logging.DEBUG)
-
- # 设置日志格式
- formatter = logging.Formatter(logFormatString)
-
- # 创建一个旋转文件处理程序
- fileHandler = RotatingFileHandler(logFilePath, maxBytes=maxBytes, backupCount=backupCount, encoding='utf-8')
- fileHandler.setLevel(logging.DEBUG)
- fileHandler.setFormatter(formatter)
-
- # # 添加过滤器
- # keywords = ["Watching", "File"]
- # keyword_filter = KeywordFilter(keywords)
- # self.logger.addFilter(keyword_filter)
-
- # 如果没有处理程序则添加
- if not self.logger.handlers:
- self.logger.addHandler(fileHandler)
- @staticmethod
- def getLogger():
- if LogUtil._instance is None:
- raise Exception("LogUtil instance is not created yet. Please create an instance first.")
- return LogUtil._instance.logger
|