From a3206cb0e8fad00db8a19da542bdf1644d8ac80b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=90=9B=E6=B6=B5?= Date: Tue, 19 Nov 2024 01:49:56 +0800 Subject: [PATCH] fix : config refactor log & details separate --- brep2sdf/config/default_config.py | 18 ++++--------- brep2sdf/utils/logger.py | 42 ++++++++++++------------------- 2 files changed, 21 insertions(+), 39 deletions(-) diff --git a/brep2sdf/config/default_config.py b/brep2sdf/config/default_config.py index 693df34..a27e869 100644 --- a/brep2sdf/config/default_config.py +++ b/brep2sdf/config/default_config.py @@ -24,17 +24,7 @@ class DataConfig: brep_dir: str = '/home/wch/brep2sdf/test_data/pkl' sdf_dir: str = '/home/wch/brep2sdf/test_data/sdf' valid_data_dir: str = '/home/wch/brep2sdf/test_data/result/pkl' - - # 保存路径 - save_dir: str = 'checkpoints' # 模型保存基础目录 - model_save_dir: str = 'checkpoints/models' # 模型文件保存目录 - log_save_dir: str = 'checkpoints/logs' # 日志文件保存目录 - result_save_dir: str = 'checkpoints/results' # 结果保存目录 - - # 文件命名 - model_name: str = 'brep2sdf' # 模型名称,用于文件命名 - checkpoint_format: str = '{model_name}_epoch_{epoch:03d}.pth' # 检查点文件名格式 - best_model_name: str = '{model_name}_best.pth' # 最佳模型文件名格式 + save_dir: str = 'checkpoints' @dataclass class TrainConfig: @@ -69,8 +59,10 @@ class LogConfig: log_interval: int = 10 # 本地日志 - log_dir: str = 'logs' - log_level: str = 'INFO' + log_dir: str = 'logs' # 日志保存目录 + log_level: str = 'INFO' # 日志级别 + console_level: str = 'INFO' # 控制台日志级别 + file_level: str = 'DEBUG' # 文件日志级别 @dataclass class Config: diff --git a/brep2sdf/utils/logger.py b/brep2sdf/utils/logger.py index c386cae..f892c41 100644 --- a/brep2sdf/utils/logger.py +++ b/brep2sdf/utils/logger.py @@ -3,27 +3,29 @@ import sys import logging import traceback from datetime import datetime +from brep2sdf.config.default_config import get_default_config class BRepLogger: _instance = None - def __new__(cls, log_level=logging.INFO, console_level=logging.INFO, - file_level=logging.DEBUG, include_trace=True): + def __new__(cls, config=None): if cls._instance is None: cls._instance = super().__new__(cls) - cls._instance._initialize_logger(log_level, console_level, - file_level, include_trace) + cls._instance._initialize_logger(config) return cls._instance - def _initialize_logger(self, log_level, console_level, file_level, include_trace): + def _initialize_logger(self, config=None): """初始化日志记录器""" + if config is None: + config = get_default_config() + # 创建logs目录 - log_dir = 'logs' + log_dir = config.log.log_dir os.makedirs(log_dir, exist_ok=True) # 创建logger self.logger = logging.getLogger('BRepLogger') - self.logger.setLevel(log_level) + self.logger.setLevel(getattr(logging, config.log.log_level.upper())) # 如果logger已经有处理器,则返回 if self.logger.handlers: @@ -40,12 +42,12 @@ class BRepLogger: current_time = datetime.now().strftime('%Y%m%d_%H%M%S') log_file = os.path.join(log_dir, f'brep2sdf_{current_time}.log') file_handler = logging.FileHandler(log_file, encoding='utf-8') - file_handler.setLevel(file_level) + file_handler.setLevel(getattr(logging, config.log.file_level.upper())) file_handler.setFormatter(detailed_formatter) # 创建控制台处理器 (简略日志) console_handler = logging.StreamHandler(sys.stdout) - console_handler.setLevel(console_level) + console_handler.setLevel(getattr(logging, config.log.console_level.upper())) console_handler.setFormatter(simple_formatter) # 添加处理器 @@ -53,12 +55,11 @@ class BRepLogger: self.logger.addHandler(console_handler) # 保存配置 - self.include_trace = include_trace + self.include_trace = True # 默认包含调用栈 # 记录初始信息 self.logger.info("BRep Logger initialized") - if file_level <= logging.DEBUG: - self.logger.debug(f"Log file: {log_file}") + self.logger.debug(f"Log file: {log_file}") def debug(self, msg): """调试信息""" @@ -87,20 +88,9 @@ class BRepLogger: """异常信息""" self.logger.exception(msg) -def setup_logger(name='BRepLogger', log_level='INFO', console_level='INFO', - file_level='DEBUG', include_trace=True): +def setup_logger(config=None): """创建logger的便捷函数""" - # 直接从logging获取对应的级别常量 - log_level = getattr(logging, log_level.upper()) - console_level = getattr(logging, console_level.upper()) - file_level = getattr(logging, file_level.upper()) - - return BRepLogger(log_level, console_level, file_level, include_trace) + return BRepLogger(config) # 使用默认配置创建全局logger实例 -logger = setup_logger( - log_level='DEBUG', # 记录所有级别日志 - console_level='DEBUG', # 控制台显示所有日志 - file_level='DEBUG', # 文件记录所有日志 - include_trace=True # 包含调用栈信息 -) \ No newline at end of file +logger = setup_logger() \ No newline at end of file