| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- # app/logging_config.py
- import logging
- import logging.handlers # ✅ 这里导入 handlers
- import os
- from datetime import datetime
-
- def setup_logging_with_rotation():
- """配置带轮转的日志系统"""
-
- # 创建日志目录
- log_dir = "logs"
- os.makedirs(log_dir, exist_ok=True)
-
- # 主日志文件
- main_log_file = os.path.join(log_dir, "app.log")
-
- # 配置根日志记录器
- root_logger = logging.getLogger()
- root_logger.setLevel(logging.INFO)
-
- # 清除现有的处理器
- root_logger.handlers.clear()
-
- # 1. 控制台处理器
- console_handler = logging.StreamHandler()
- console_handler.setLevel(logging.INFO)
-
- # 2. 文件处理器 - 轮转,最大10MB,保留5个备份
- file_handler = logging.handlers.RotatingFileHandler( # ✅ 使用完整的路径
- main_log_file,
- maxBytes=10 * 1024 * 1024, # 10MB
- backupCount=5,
- encoding='utf-8'
- )
- file_handler.setLevel(logging.DEBUG)
-
- # 3. 错误日志处理器 - 单独记录错误
- error_log_file = os.path.join(log_dir, "error.log")
- error_handler = logging.handlers.RotatingFileHandler(
- error_log_file,
- maxBytes=5 * 1024 * 1024, # 5MB
- backupCount=3,
- encoding='utf-8'
- )
- error_handler.setLevel(logging.ERROR)
-
- # 设置日志格式
- detailed_formatter = logging.Formatter(
- '%(asctime)s - %(name)s - %(levelname)s - [%(filename)s:%(lineno)d] - %(message)s',
- datefmt='%Y-%m-%d %H:%M:%S'
- )
-
- simple_formatter = logging.Formatter(
- '%(asctime)s - %(levelname)s - %(message)s',
- datefmt='%H:%M:%S'
- )
-
- console_handler.setFormatter(simple_formatter)
- file_handler.setFormatter(detailed_formatter)
- error_handler.setFormatter(detailed_formatter)
-
- # 添加过滤器到错误处理器
- class ErrorFilter(logging.Filter):
- def filter(self, record):
- return record.levelno >= logging.ERROR
-
- error_handler.addFilter(ErrorFilter())
-
- # 添加处理器
- root_logger.addHandler(console_handler)
- root_logger.addHandler(file_handler)
- root_logger.addHandler(error_handler)
-
- # 配置第三方库的日志级别
- logging.getLogger("uvicorn").setLevel(logging.WARNING)
- logging.getLogger("uvicorn.access").setLevel(logging.WARNING)
- logging.getLogger("sqlalchemy.engine").setLevel(logging.WARNING)
- logging.getLogger("sqlalchemy.orm").setLevel(logging.WARNING)
-
- # 配置我们应用的日志级别
- logging.getLogger("app").setLevel(logging.DEBUG)
- logging.getLogger("app.api.v1").setLevel(logging.DEBUG)
- logging.getLogger("app.core.security").setLevel(logging.DEBUG)
-
- root_logger.info(f"✅ 轮转日志系统初始化完成")
- root_logger.info(f" 主日志文件: {main_log_file}")
- root_logger.info(f" 错误日志文件: {error_log_file}")
-
- return root_logger
|