| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- """
- 集中式日志配置模块
- 提供统一的日志配置和日志器获取接口。
- """
- import logging
- import sys
- from pathlib import Path
- from typing import Optional
- # 日志格式配置
- LOG_FORMAT = "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
- DATE_FORMAT = "%Y-%m-%d %H:%M:%S"
- # 默认日志级别
- DEFAULT_LOG_LEVEL = logging.INFO
- # 日志文件配置(可选)
- LOG_DIR = Path("logs")
- LOG_FILE = LOG_DIR / "app.log"
- def setup_logging(
- level: int = DEFAULT_LOG_LEVEL,
- log_to_file: bool = False,
- log_file: Optional[Path] = None
- ) -> None:
- """
- 配置全局日志设置
-
- Args:
- level: 日志级别
- log_to_file: 是否输出到文件
- log_file: 日志文件路径(如果log_to_file为True)
- """
- # 创建根日志器
- root_logger = logging.getLogger()
- root_logger.setLevel(level)
-
- # 清除现有的处理器
- root_logger.handlers.clear()
-
- # 创建格式化器
- formatter = logging.Formatter(LOG_FORMAT, DATE_FORMAT)
-
- # 添加控制台处理器
- console_handler = logging.StreamHandler(sys.stdout)
- console_handler.setLevel(level)
- console_handler.setFormatter(formatter)
- root_logger.addHandler(console_handler)
-
- # 添加文件处理器(如果需要)
- if log_to_file:
- file_path = log_file or LOG_FILE
- # 确保日志目录存在
- file_path.parent.mkdir(parents=True, exist_ok=True)
-
- file_handler = logging.FileHandler(file_path, encoding="utf-8")
- file_handler.setLevel(level)
- file_handler.setFormatter(formatter)
- root_logger.addHandler(file_handler)
- def get_logger(name: str) -> logging.Logger:
- """
- 获取命名日志器
-
- Args:
- name: 日志器名称(通常使用 __name__)
-
- Returns:
- 配置好的日志器实例
-
- Example:
- >>> logger = get_logger(__name__)
- >>> logger.info("Application started")
- """
- return logging.getLogger(name)
- # 在模块导入时自动配置日志
- setup_logging()
|