logging_config.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. """
  2. 集中式日志配置模块
  3. 提供统一的日志配置和日志器获取接口。
  4. """
  5. import logging
  6. import sys
  7. from pathlib import Path
  8. from typing import Optional
  9. # 日志格式配置
  10. LOG_FORMAT = "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
  11. DATE_FORMAT = "%Y-%m-%d %H:%M:%S"
  12. # 默认日志级别
  13. DEFAULT_LOG_LEVEL = logging.INFO
  14. # 日志文件配置(可选)
  15. LOG_DIR = Path("logs")
  16. LOG_FILE = LOG_DIR / "app.log"
  17. def setup_logging(
  18. level: int = DEFAULT_LOG_LEVEL,
  19. log_to_file: bool = False,
  20. log_file: Optional[Path] = None
  21. ) -> None:
  22. """
  23. 配置全局日志设置
  24. Args:
  25. level: 日志级别
  26. log_to_file: 是否输出到文件
  27. log_file: 日志文件路径(如果log_to_file为True)
  28. """
  29. # 创建根日志器
  30. root_logger = logging.getLogger()
  31. root_logger.setLevel(level)
  32. # 清除现有的处理器
  33. root_logger.handlers.clear()
  34. # 创建格式化器
  35. formatter = logging.Formatter(LOG_FORMAT, DATE_FORMAT)
  36. # 添加控制台处理器
  37. console_handler = logging.StreamHandler(sys.stdout)
  38. console_handler.setLevel(level)
  39. console_handler.setFormatter(formatter)
  40. root_logger.addHandler(console_handler)
  41. # 添加文件处理器(如果需要)
  42. if log_to_file:
  43. file_path = log_file or LOG_FILE
  44. # 确保日志目录存在
  45. file_path.parent.mkdir(parents=True, exist_ok=True)
  46. file_handler = logging.FileHandler(file_path, encoding="utf-8")
  47. file_handler.setLevel(level)
  48. file_handler.setFormatter(formatter)
  49. root_logger.addHandler(file_handler)
  50. def get_logger(name: str) -> logging.Logger:
  51. """
  52. 获取命名日志器
  53. Args:
  54. name: 日志器名称(通常使用 __name__)
  55. Returns:
  56. 配置好的日志器实例
  57. Example:
  58. >>> logger = get_logger(__name__)
  59. >>> logger.info("Application started")
  60. """
  61. return logging.getLogger(name)
  62. # 在模块导入时自动配置日志
  63. setup_logging()