""" 日志配置模块 统一配置所有模块的日志格式和级别 """ import logging import sys def setup_logging(): """配置日志系统""" # 获取根日志器 root_logger = logging.getLogger() # 创建统一的格式 formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S') # 如果已经有handlers,先清除(避免重复配置) if root_logger.handlers: root_logger.handlers.clear() # 创建StreamHandler,输出到stderr(gunicorn会捕获stderr) console_handler = logging.StreamHandler(sys.stderr) console_handler.setFormatter(formatter) console_handler.setLevel(logging.INFO) # 配置根日志器 root_logger.setLevel(logging.INFO) root_logger.addHandler(console_handler) # 配置第三方库的日志级别,确保能看到相关日志 # httpx 是很多HTTP客户端库的底层,需要设置 logging.getLogger("httpx").setLevel(logging.INFO) # urllib3 也是常见的HTTP库 logging.getLogger("urllib3").setLevel(logging.INFO) # requests库 logging.getLogger("requests").setLevel(logging.INFO) # volcenginesdkarkruntime (豆包SDK) logging.getLogger("volcenginesdkarkruntime").setLevel(logging.INFO) logging.getLogger("volcengine").setLevel(logging.INFO) # tos (火山引擎对象存储) logging.getLogger("tos").setLevel(logging.INFO) # OpenAI SDK logging.getLogger("openai").setLevel(logging.INFO) # conf模块相关的日志 logging.getLogger("conf").setLevel(logging.INFO) # 配置chat和llm模块的logger(使用模块名作为logger名称) # 这些logger会继承根logger的handler,因为propagate默认是True for logger_name in ["chat", "llm"]: module_logger = logging.getLogger(logger_name) module_logger.setLevel(logging.INFO) module_logger.propagate = True # 确保传播到根logger # 不添加独立的handler,让它使用根logger的handler # 确保根日志器的级别设置为INFO,以便所有子logger都能输出 root_logger.setLevel(logging.INFO) return logging.getLogger("TextGenerationAPI") # 自动配置日志(当模块被导入时) _ = setup_logging() # 提供便捷的logger获取方式 def get_logger(name="TextGenerationAPI"): """获取指定名称的日志器""" return logging.getLogger(name)