"""日志管理模块"""

import logging
import os
from datetime import datetime


class LogManager:
    """日志管理器
    
    功能：
    1. 配置和管理日志
    2. 提供不同级别的日志记录方法
    3. 支持文件和控制台输出
    """
    
    def __init__(self, log_dir: str = None):
        """初始化日志管理器
        
        Args:
            log_dir: 日志目录
        """
        if log_dir is None:
            log_dir = os.path.join(os.getcwd(), 'logs')
        
        os.makedirs(log_dir, exist_ok=True)
        
        # 创建日志文件名
        timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')
        log_file = os.path.join(log_dir, f'pipeline_{timestamp}.log')
        
        # 配置日志
        logging.basicConfig(
            level=logging.INFO,
            format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
            handlers=[
                logging.FileHandler(log_file, encoding='utf-8'),
                logging.StreamHandler()
            ]
        )
        
        self.logger = logging.getLogger('pipeline')
    
    def get_logger(self) -> logging.Logger:
        """获取日志记录器
        
        Returns:
            logging.Logger: 日志记录器
        """
        return self.logger
    
    def info(self, message: str):
        """记录信息级别日志
        
        Args:
            message: 日志消息
        """
        self.logger.info(message)
    
    def warning(self, message: str):
        """记录警告级别日志
        
        Args:
            message: 日志消息
        """
        self.logger.warning(message)
    
    def error(self, message: str, exc_info: bool = False):
        """记录错误级别日志
        
        Args:
            message: 日志消息
            exc_info: 是否包含异常信息
        """
        self.logger.error(message, exc_info=exc_info)
    
    def debug(self, message: str):
        """记录调试级别日志
        
        Args:
            message: 日志消息
        """
        self.logger.debug(message)
    
    def critical(self, message: str, exc_info: bool = False):
        """记录严重错误级别日志
        
        Args:
            message: 日志消息
            exc_info: 是否包含异常信息
        """
        self.logger.critical(message, exc_info=exc_info)
