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:
2026-01-08 16:18:41 +08:00
parent a8108d9afd
commit 5f8ebd2da5
6 changed files with 86 additions and 536 deletions
+13 -6
View File
@@ -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