Refactor logger to implement a global file handler, preventing duplicate log entries. Updated logger initialization to ensure a single file handler is used across all loggers, enhancing logging efficiency and clarity.
This commit is contained in:
Binary file not shown.
@@ -59,6 +59,7 @@ class Logger:
|
||||
if not self._initialized:
|
||||
self._loggers = {}
|
||||
self._config = None
|
||||
self._file_handler = None # 全局文件处理器,避免重复创建
|
||||
self._initialized = True
|
||||
|
||||
def init_logger(self, name: str = "gx_gp_monitor", config=None) -> logging.Logger:
|
||||
@@ -89,6 +90,9 @@ class Logger:
|
||||
logger = logging.getLogger(name)
|
||||
logger.setLevel(getattr(logging, self._config.log_level.value))
|
||||
|
||||
# 防止消息传播到父logger,避免重复记录
|
||||
logger.propagate = False
|
||||
|
||||
# 避免重复添加处理器
|
||||
if logger.handlers:
|
||||
return logger
|
||||
@@ -115,20 +119,23 @@ class Logger:
|
||||
|
||||
logger.addHandler(console_handler)
|
||||
|
||||
# 文件处理器(如果配置了日志文件)
|
||||
if self._config.log_file:
|
||||
# 文件处理器(如果配置了日志文件)- 使用全局文件处理器避免重复
|
||||
if self._config.log_file and self._file_handler is None:
|
||||
log_dir = Path(self._config.log_file).parent
|
||||
log_dir.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
file_handler = logging.handlers.RotatingFileHandler(
|
||||
self._file_handler = logging.handlers.RotatingFileHandler(
|
||||
self._config.log_file,
|
||||
maxBytes=self._config.log_max_size,
|
||||
backupCount=self._config.log_backup_count,
|
||||
encoding='utf-8'
|
||||
)
|
||||
file_handler.setLevel(getattr(logging, self._config.log_level.value))
|
||||
file_handler.setFormatter(formatter)
|
||||
logger.addHandler(file_handler)
|
||||
self._file_handler.setLevel(getattr(logging, self._config.log_level.value))
|
||||
self._file_handler.setFormatter(formatter)
|
||||
|
||||
# 为所有logger添加全局文件处理器
|
||||
if self._file_handler is not None:
|
||||
logger.addHandler(self._file_handler)
|
||||
|
||||
self._loggers[name] = logger
|
||||
return logger
|
||||
|
||||
Reference in New Issue
Block a user