|
|
@ -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 # 包含调用栈信息 |
|
|
|
) |
|
|
|
logger = setup_logger() |