Browse Source

fix : config refactor log & details separate

main
王琛涵 7 months ago
parent
commit
a3206cb0e8
  1. 18
      brep2sdf/config/default_config.py
  2. 40
      brep2sdf/utils/logger.py

18
brep2sdf/config/default_config.py

@ -24,17 +24,7 @@ class DataConfig:
brep_dir: str = '/home/wch/brep2sdf/test_data/pkl' brep_dir: str = '/home/wch/brep2sdf/test_data/pkl'
sdf_dir: str = '/home/wch/brep2sdf/test_data/sdf' sdf_dir: str = '/home/wch/brep2sdf/test_data/sdf'
valid_data_dir: str = '/home/wch/brep2sdf/test_data/result/pkl' valid_data_dir: str = '/home/wch/brep2sdf/test_data/result/pkl'
save_dir: str = 'checkpoints'
# 保存路径
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' # 最佳模型文件名格式
@dataclass @dataclass
class TrainConfig: class TrainConfig:
@ -69,8 +59,10 @@ class LogConfig:
log_interval: int = 10 log_interval: int = 10
# 本地日志 # 本地日志
log_dir: str = 'logs' log_dir: str = 'logs' # 日志保存目录
log_level: str = 'INFO' log_level: str = 'INFO' # 日志级别
console_level: str = 'INFO' # 控制台日志级别
file_level: str = 'DEBUG' # 文件日志级别
@dataclass @dataclass
class Config: class Config:

40
brep2sdf/utils/logger.py

@ -3,27 +3,29 @@ import sys
import logging import logging
import traceback import traceback
from datetime import datetime from datetime import datetime
from brep2sdf.config.default_config import get_default_config
class BRepLogger: class BRepLogger:
_instance = None _instance = None
def __new__(cls, log_level=logging.INFO, console_level=logging.INFO, def __new__(cls, config=None):
file_level=logging.DEBUG, include_trace=True):
if cls._instance is None: if cls._instance is None:
cls._instance = super().__new__(cls) cls._instance = super().__new__(cls)
cls._instance._initialize_logger(log_level, console_level, cls._instance._initialize_logger(config)
file_level, include_trace)
return cls._instance 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目录 # 创建logs目录
log_dir = 'logs' log_dir = config.log.log_dir
os.makedirs(log_dir, exist_ok=True) os.makedirs(log_dir, exist_ok=True)
# 创建logger # 创建logger
self.logger = logging.getLogger('BRepLogger') self.logger = logging.getLogger('BRepLogger')
self.logger.setLevel(log_level) self.logger.setLevel(getattr(logging, config.log.log_level.upper()))
# 如果logger已经有处理器,则返回 # 如果logger已经有处理器,则返回
if self.logger.handlers: if self.logger.handlers:
@ -40,12 +42,12 @@ class BRepLogger:
current_time = datetime.now().strftime('%Y%m%d_%H%M%S') current_time = datetime.now().strftime('%Y%m%d_%H%M%S')
log_file = os.path.join(log_dir, f'brep2sdf_{current_time}.log') log_file = os.path.join(log_dir, f'brep2sdf_{current_time}.log')
file_handler = logging.FileHandler(log_file, encoding='utf-8') 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) file_handler.setFormatter(detailed_formatter)
# 创建控制台处理器 (简略日志) # 创建控制台处理器 (简略日志)
console_handler = logging.StreamHandler(sys.stdout) 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) console_handler.setFormatter(simple_formatter)
# 添加处理器 # 添加处理器
@ -53,11 +55,10 @@ class BRepLogger:
self.logger.addHandler(console_handler) self.logger.addHandler(console_handler)
# 保存配置 # 保存配置
self.include_trace = include_trace self.include_trace = True # 默认包含调用栈
# 记录初始信息 # 记录初始信息
self.logger.info("BRep Logger initialized") 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): def debug(self, msg):
@ -87,20 +88,9 @@ class BRepLogger:
"""异常信息""" """异常信息"""
self.logger.exception(msg) self.logger.exception(msg)
def setup_logger(name='BRepLogger', log_level='INFO', console_level='INFO', def setup_logger(config=None):
file_level='DEBUG', include_trace=True):
"""创建logger的便捷函数""" """创建logger的便捷函数"""
# 直接从logging获取对应的级别常量 return BRepLogger(config)
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)
# 使用默认配置创建全局logger实例 # 使用默认配置创建全局logger实例
logger = setup_logger( logger = setup_logger()
log_level='DEBUG', # 记录所有级别日志
console_level='DEBUG', # 控制台显示所有日志
file_level='DEBUG', # 文件记录所有日志
include_trace=True # 包含调用栈信息
)
Loading…
Cancel
Save