123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- """
- 统一的日志配置工具
- 用于在整个项目中统一管理日志配置,避免重复日志输出
- """
- import logging
- from typing import Optional
- def setup_logger(
- name: str,
- level: int = logging.INFO,
- propagate: bool = False,
- formatter_string: Optional[str] = None
- ) -> logging.Logger:
- """
- 设置并配置logger,避免重复日志输出
-
- @param name: logger名称,通常使用 __name__
- @param level: 日志级别,默认为 INFO
- @param propagate: 是否向父级logger传播,默认为False,避免重复输出
- @param formatter_string: 自定义格式字符串,如果不提供则使用默认格式
- @return: 配置好的logger对象
- """
- logger = logging.getLogger(name)
-
- # 避免重复添加处理器导致重复日志
- if not logger.handlers:
- logger.setLevel(level)
-
- # 创建控制台处理器
- handler = logging.StreamHandler()
-
- # 设置日志格式
- if formatter_string is None:
- formatter_string = '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
- formatter = logging.Formatter(formatter_string)
- handler.setFormatter(formatter)
-
- # 添加处理器
- logger.addHandler(handler)
-
- # 控制日志传播
- logger.propagate = propagate
-
- return logger
- def get_api_logger(module_name: str) -> logging.Logger:
- """
- 为API模块获取标准logger配置
-
- @param module_name: 模块名称,通常使用 __name__
- @return: 配置好的logger对象
- """
- return setup_logger(
- name=module_name,
- level=logging.INFO,
- propagate=False # API层不传播到父级,避免与uvicorn日志冲突
- )
- def get_service_logger(module_name: str) -> logging.Logger:
- """
- 为Service模块获取标准logger配置
-
- @param module_name: 模块名称,通常使用 __name__
- @return: 配置好的logger对象
- """
- return setup_logger(
- name=module_name,
- level=logging.INFO,
- propagate=False # Service层不传播到父级,保持独立
- )
- def get_utils_logger(module_name: str) -> logging.Logger:
- """
- 为工具模块获取标准logger配置
-
- @param module_name: 模块名称,通常使用 __name__
- @return: 配置好的logger对象
- """
- return setup_logger(
- name=module_name,
- level=logging.INFO,
- propagate=False # 工具层不传播到父级,保持独立
- )
- # 主应用日志配置函数
- def configure_root_logging(level: int = logging.INFO) -> None:
- """
- 配置根日志系统,只在应用启动时调用一次
-
- @param level: 根日志级别
- """
- # 检查是否已经配置过,避免重复配置
- if not logging.getLogger().handlers:
- logging.basicConfig(
- level=level,
- format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
- )
|