|
@@ -172,7 +172,8 @@ class ModuleLogger:
|
|
|
"""
|
|
"""
|
|
|
|
|
|
|
|
def __init__(self, name: str, module_name: str, log_dir: str = "logs",
|
|
def __init__(self, name: str, module_name: str, log_dir: str = "logs",
|
|
|
- console_output: bool = True, file_max_mb: int = 10, backup_count: int = 5):
|
|
|
|
|
|
|
+ console_output: bool = True, file_max_mb: int = 10, backup_count: int = 5,
|
|
|
|
|
+ weekly: bool = False):
|
|
|
"""
|
|
"""
|
|
|
初始化模块日志记录器
|
|
初始化模块日志记录器
|
|
|
|
|
|
|
@@ -183,6 +184,7 @@ class ModuleLogger:
|
|
|
console_output: 是否输出到控制台
|
|
console_output: 是否输出到控制台
|
|
|
file_max_mb: 单个日志文件最大大小(MB)
|
|
file_max_mb: 单个日志文件最大大小(MB)
|
|
|
backup_count: 备份文件数量
|
|
backup_count: 备份文件数量
|
|
|
|
|
+ weekly: 是否按周创建目录(周一-周日为一周,目录下按天保存日志)
|
|
|
"""
|
|
"""
|
|
|
self.name = name
|
|
self.name = name
|
|
|
self.module_name = module_name
|
|
self.module_name = module_name
|
|
@@ -190,6 +192,7 @@ class ModuleLogger:
|
|
|
self.console_output = console_output
|
|
self.console_output = console_output
|
|
|
self.file_max_bytes = file_max_mb * 1024 * 1024
|
|
self.file_max_bytes = file_max_mb * 1024 * 1024
|
|
|
self.backup_count = backup_count
|
|
self.backup_count = backup_count
|
|
|
|
|
+ self.weekly = weekly
|
|
|
|
|
|
|
|
# 创建logger
|
|
# 创建logger
|
|
|
self.logger = logging.getLogger(name)
|
|
self.logger = logging.getLogger(name)
|
|
@@ -206,7 +209,10 @@ class ModuleLogger:
|
|
|
os.makedirs(self.log_dir, exist_ok=True)
|
|
os.makedirs(self.log_dir, exist_ok=True)
|
|
|
|
|
|
|
|
# 创建文件处理器
|
|
# 创建文件处理器
|
|
|
- self._create_file_handlers()
|
|
|
|
|
|
|
+ if weekly:
|
|
|
|
|
+ self._create_weekly_file_handlers()
|
|
|
|
|
+ else:
|
|
|
|
|
+ self._create_file_handlers()
|
|
|
|
|
|
|
|
# 创建控制台处理器(强制为开发环境启用)
|
|
# 创建控制台处理器(强制为开发环境启用)
|
|
|
if console_output:
|
|
if console_output:
|
|
@@ -248,6 +254,23 @@ class ModuleLogger:
|
|
|
handler.addFilter(trace_filter)
|
|
handler.addFilter(trace_filter)
|
|
|
self.logger.addHandler(handler)
|
|
self.logger.addHandler(handler)
|
|
|
|
|
|
|
|
|
|
+ def _create_weekly_file_handlers(self):
|
|
|
|
|
+ """创建按周目录组织、按天保存的日志文件处理器
|
|
|
|
|
+
|
|
|
|
|
+ 目录结构: logs/{module_name}/2026-W19_0505-0511/0506_{module_name}_{level}.log
|
|
|
|
|
+ 周一到周日为一周,目录以周一日期命名。
|
|
|
|
|
+ """
|
|
|
|
|
+ from .weekly_handler import create_weekly_file_handlers
|
|
|
|
|
+ handlers = create_weekly_file_handlers(
|
|
|
|
|
+ module_name=self.module_name,
|
|
|
|
|
+ base_dir=self.log_dir,
|
|
|
|
|
+ file_max_mb=self.file_max_bytes // (1024 * 1024),
|
|
|
|
|
+ backup_count=self.backup_count,
|
|
|
|
|
+ )
|
|
|
|
|
+ for h in handlers:
|
|
|
|
|
+ h.setFormatter(self.formatter)
|
|
|
|
|
+ self.logger.addHandler(h)
|
|
|
|
|
+
|
|
|
def _create_console_handler(self):
|
|
def _create_console_handler(self):
|
|
|
"""创建控制台日志处理器"""
|
|
"""创建控制台日志处理器"""
|
|
|
console_handler = logging.StreamHandler(sys.stdout)
|
|
console_handler = logging.StreamHandler(sys.stdout)
|
|
@@ -314,14 +337,15 @@ console_out = False if config_handler.get("log", "CONSOLE_OUTPUT", "True").upper
|
|
|
file_max = int(config_handler.get("log", "LOG_FILE_MAX_MB", "10"))
|
|
file_max = int(config_handler.get("log", "LOG_FILE_MAX_MB", "10"))
|
|
|
backup = int(config_handler.get("log", "LOG_BACKUP_COUNT", "5"))
|
|
backup = int(config_handler.get("log", "LOG_BACKUP_COUNT", "5"))
|
|
|
|
|
|
|
|
-# 施工方案审查模块专用logger
|
|
|
|
|
|
|
+# 施工方案审查模块专用logger(按周组织日志目录)
|
|
|
review_logger = ModuleLogger(
|
|
review_logger = ModuleLogger(
|
|
|
name="construction_review",
|
|
name="construction_review",
|
|
|
module_name="construction_review",
|
|
module_name="construction_review",
|
|
|
log_dir=base_log_dir,
|
|
log_dir=base_log_dir,
|
|
|
- console_output=True, # 强制启用控制台输出(开发环境)
|
|
|
|
|
|
|
+ console_output=True,
|
|
|
file_max_mb=file_max,
|
|
file_max_mb=file_max,
|
|
|
- backup_count=backup
|
|
|
|
|
|
|
+ backup_count=backup,
|
|
|
|
|
+ weekly=True
|
|
|
)
|
|
)
|
|
|
review_logger.info(f"construction_review logger initialized, log_dir: {os.path.join(base_log_dir, 'construction_review')}")
|
|
review_logger.info(f"construction_review logger initialized, log_dir: {os.path.join(base_log_dir, 'construction_review')}")
|
|
|
|
|
|