import logging from logging.handlers import RotatingFileHandler import os LOG_DIR = "logs" LOG_FILE = "app.log" LOG_PATH = os.path.join(LOG_DIR, LOG_FILE) MAX_BYTES = 5 * 1024 * 1024 # 5MB BACKUP_COUNT = 5 # 全局共用的 handler,只初始化一次 _handler = None def setup_logger(name: str, level=logging.INFO) -> logging.Logger: global _handler if not os.path.exists(LOG_DIR): os.makedirs(LOG_DIR) logger = logging.getLogger(name) logger.setLevel(level) # 设置这个 logger 的最低级别 # 避免重复添加 handler(只添加一次) if not _handler: _handler = RotatingFileHandler(LOG_PATH, maxBytes=MAX_BYTES, backupCount=BACKUP_COUNT, encoding='utf-8') formatter = logging.Formatter('[%(asctime)s] %(levelname)s [%(name)s] %(message)s') _handler.setFormatter(formatter) _handler.setLevel(logging.DEBUG) # Handler 设置最低等级,捕获所有内容 if not logger.handlers: logger.addHandler(_handler) logger.propagate = False # 避免日志冒泡打印两遍 return logger