1. 环境准备
1.1 安装依赖
首先,我们需要安装必要的依赖:
pip install fastapi uvicorn loguru
1.2 项目结构
推荐的项目结构如下:
your_project/
├── app/
│ ├── __init__.py
│ ├── main.py
│ └── core/
│ ├── __init__.py
│ ├── config.py
│ └── logger.py
├── logs/
└── requirements.txt
2. 基础概念
2.1 为什么选择 Loguru?
-
相比标准库的优势
- 更简洁的 API
- 内置异步支持
- 强大的文件轮转
- 丰富的格式化选项
- 完善的异常诊断
-
主要特性
- 结构化日志记录
- 自动文件轮转
- 异步日志写入
- 异常追踪增强
- 彩色输出支持
3. 详细实现
3.1 配置文件
首先,在 core/config.py 中定义配置:
from pathlib import Path
class Settings:
# 项目基础配置
BASE_DIR = Path(__file__).resolve().parent.parent.parent
DEBUG = True
# 日志配置
LOG_ROTATION = "00:00" # 每天午夜轮转
LOG_RETENTION = "30 days" # 保留30天
LOG_COMPRESSION = "zip" # 压缩格式
settings = Settings()
3.2 日志拦截器
在 core/logger.py 中实现日志拦截器:
class InterceptHandler(logging.Handler):
"""
日志拦截处理器:将所有 Python 标准日志重定向到 Loguru
工作原理:
1. 继承自 logging.Handler
2. 重写 emit 方法处理日志记录
3. 将标准库日志转换为 Loguru 格式
"""
def emit(self, record: logging.LogRecord) -> None:
# 尝试获取日志级别名称
try:
level = logger.level(record.levelname).name
except ValueError:
level = record.levelno
# 获取调用帧信息
frame, depth = logging.currentframe(), 2
while frame.f_code.co_filename == logging.__file__:
frame = frame.f_back
depth

104

被折叠的 条评论
为什么被折叠?



