import logging import sys # 定义一个全局的日志格式 LOG_FORMAT = "%(asctime)s - %(name)s - %(levelname)s - %(message)s" def setup_logging(): """ 配置日志系统,使其同时输出到文件和控制台。 这个函数应该在应用程序启动时只调用一次。 """ # 获取根日志记录器 root_logger = logging.getLogger() root_logger.setLevel(logging.INFO) # 设置根日志记录器的级别 # 如果已经有处理器,先清空,防止重复添加 if root_logger.hasHandlers(): root_logger.handlers.clear() # 创建一个通用的格式化器 formatter = logging.Formatter(LOG_FORMAT) # 1. 创建控制台处理器 (StreamHandler) # - 将日志输出到标准输出(您的终端) console_handler = logging.StreamHandler(sys.stdout) console_handler.setFormatter(formatter) root_logger.addHandler(console_handler) # 2. 创建文件处理器 (FileHandler) # - 将日志写入文件 app.log # - mode='w' 表示每次启动都覆盖旧日志 # - encoding='utf-8' 确保正确处理中文字符 file_handler = logging.FileHandler('app.log', mode='w', encoding='utf-8') file_handler.setFormatter(formatter) root_logger.addHandler(file_handler) # 配置完成后,可以记录一条消息来确认 logging.info("日志系统已成功配置,将同时输出到控制台和 app.log 文件。") def get_logger(name: str) -> logging.Logger: """ 获取一个指定名称的日志记录器实例。 假设 setup_logging() 已经在此之前被调用。 """ return logging.getLogger(name)