| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- 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
|