CaiYouHui后端fastapi实现

logging_config.py 2.9KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. # app/logging_config.py
  2. import logging
  3. import logging.handlers # ✅ 这里导入 handlers
  4. import os
  5. from datetime import datetime
  6. def setup_logging_with_rotation():
  7. """配置带轮转的日志系统"""
  8. # 创建日志目录
  9. log_dir = "logs"
  10. os.makedirs(log_dir, exist_ok=True)
  11. # 主日志文件
  12. main_log_file = os.path.join(log_dir, "app.log")
  13. # 配置根日志记录器
  14. root_logger = logging.getLogger()
  15. root_logger.setLevel(logging.INFO)
  16. # 清除现有的处理器
  17. root_logger.handlers.clear()
  18. # 1. 控制台处理器
  19. console_handler = logging.StreamHandler()
  20. console_handler.setLevel(logging.INFO)
  21. # 2. 文件处理器 - 轮转,最大10MB,保留5个备份
  22. file_handler = logging.handlers.RotatingFileHandler( # ✅ 使用完整的路径
  23. main_log_file,
  24. maxBytes=10 * 1024 * 1024, # 10MB
  25. backupCount=5,
  26. encoding='utf-8'
  27. )
  28. file_handler.setLevel(logging.DEBUG)
  29. # 3. 错误日志处理器 - 单独记录错误
  30. error_log_file = os.path.join(log_dir, "error.log")
  31. error_handler = logging.handlers.RotatingFileHandler(
  32. error_log_file,
  33. maxBytes=5 * 1024 * 1024, # 5MB
  34. backupCount=3,
  35. encoding='utf-8'
  36. )
  37. error_handler.setLevel(logging.ERROR)
  38. # 设置日志格式
  39. detailed_formatter = logging.Formatter(
  40. '%(asctime)s - %(name)s - %(levelname)s - [%(filename)s:%(lineno)d] - %(message)s',
  41. datefmt='%Y-%m-%d %H:%M:%S'
  42. )
  43. simple_formatter = logging.Formatter(
  44. '%(asctime)s - %(levelname)s - %(message)s',
  45. datefmt='%H:%M:%S'
  46. )
  47. console_handler.setFormatter(simple_formatter)
  48. file_handler.setFormatter(detailed_formatter)
  49. error_handler.setFormatter(detailed_formatter)
  50. # 添加过滤器到错误处理器
  51. class ErrorFilter(logging.Filter):
  52. def filter(self, record):
  53. return record.levelno >= logging.ERROR
  54. error_handler.addFilter(ErrorFilter())
  55. # 添加处理器
  56. root_logger.addHandler(console_handler)
  57. root_logger.addHandler(file_handler)
  58. root_logger.addHandler(error_handler)
  59. # 配置第三方库的日志级别
  60. logging.getLogger("uvicorn").setLevel(logging.WARNING)
  61. logging.getLogger("uvicorn.access").setLevel(logging.WARNING)
  62. logging.getLogger("sqlalchemy.engine").setLevel(logging.WARNING)
  63. logging.getLogger("sqlalchemy.orm").setLevel(logging.WARNING)
  64. # 配置我们应用的日志级别
  65. logging.getLogger("app").setLevel(logging.DEBUG)
  66. logging.getLogger("app.api.v1").setLevel(logging.DEBUG)
  67. logging.getLogger("app.core.security").setLevel(logging.DEBUG)
  68. root_logger.info(f"✅ 轮转日志系统初始化完成")
  69. root_logger.info(f" 主日志文件: {main_log_file}")
  70. root_logger.info(f" 错误日志文件: {error_log_file}")
  71. return root_logger