import logging import os import sys from logging.handlers import RotatingFileHandler def get_logger(name): """ 获取统一配置的logger实例 Args: name: logger名称,通常使用 __name__ Returns: logging.Logger: 配置好的logger实例 """ logger = logging.getLogger(name) # 如果logger已经配置过,直接返回 if logger.handlers: return logger # 设置日志级别 logger.setLevel(logging.INFO) # 创建日志目录 log_dir = os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))), 'logs') os.makedirs(log_dir, exist_ok=True) # 创建日志格式 formatter = logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S' ) # 文件处理器 - 使用轮转日志 log_file = os.path.join(log_dir, 'langgraph.log') file_handler = RotatingFileHandler( log_file, maxBytes=10*1024*1024, # 10MB backupCount=5, encoding='utf-8' ) file_handler.setLevel(logging.INFO) file_handler.setFormatter(formatter) # 控制台处理器 console_handler = logging.StreamHandler(sys.stdout) console_handler.setLevel(logging.INFO) console_handler.setFormatter(formatter) # 添加处理器 logger.addHandler(file_handler) logger.addHandler(console_handler) # 防止日志向上传播 logger.propagate = False return logger