import os import logging from logging.handlers import RotatingFileHandler import vs_log_macros # 导入你的宏模块 def setup_app_logger(app_name: str, log_dir: str = "logs") -> logging.Logger: """ 配置并返回一个标准的 Logger,支持终端输出和文件滚动保存。 """ if not os.path.exists(log_dir): os.makedirs(log_dir) logger = logging.getLogger(app_name) logger.setLevel(logging.INFO) # 避免重复添加 Handler if not logger.handlers: log_file = os.path.join(log_dir, f"{app_name.lower()}.log") # 1. 终端输出 console_handler = logging.StreamHandler() console_handler.setLevel(logging.INFO) # 2. 文件输出 file_handler = RotatingFileHandler( log_file, maxBytes=10 * 1024 * 1024, backupCount=10, encoding='utf-8' ) file_handler.setLevel(logging.INFO) # 设置格式 formatter = logging.Formatter('[%(asctime)s] [%(levelname)s] %(message)s', datefmt='%Y-%m-%d %H:%M:%S') console_handler.setFormatter(formatter) file_handler.setFormatter(formatter) logger.addHandler(console_handler) logger.addHandler(file_handler) # ========================================== # 核心:将这个专属 Logger 注入到宏! # 这样整个系统里所有的 VSC_INFO 都会输出到你的 app_name.log 里! # ========================================== vs_log_macros.set_active_logger(logger) return logger