网站seo优化教程,郑州网站seo哪家公司好,主机免费云服务器如何,网站套餐到期什么意思FastAPI Vue3 自动化测试平台#xff08;2#xff09;-- 日志中间件
前言
在开发和运行自动化测试平台时#xff0c;日志功能是至关重要的一部分。日志不仅能帮助我们快速定位和解决问题#xff0c;还能作为平台运行的记录依据#xff0c;为后续分析和优化提供参考。
…FastAPI Vue3 自动化测试平台2-- 日志中间件
前言
在开发和运行自动化测试平台时日志功能是至关重要的一部分。日志不仅能帮助我们快速定位和解决问题还能作为平台运行的记录依据为后续分析和优化提供参考。
在本篇文章中我们将介绍如何为 FastAPI 构建一个日志中间件记录请求日志、错误日志和系统运行日志等关键信息从而提升系统的可维护性和可观测性。 为什么需要日志中间件
在一个完整的测试平台中日志系统主要承担以下功能
记录 API 请求日志包括请求的时间、URL、方法、参数、响应时间等信息便于排查问题。捕获错误日志记录后端的异常和错误为开发者提供调试依据。记录系统运行日志包括任务执行、关键操作、资源使用情况等为系统优化提供数据支持。结构化日志输出输出 JSON 格式的日志便于后续存储和分析。 日志中间件的实现
1. 安装依赖
我们将使用 Python 的 loguru 库来实现日志功能。它简单易用功能强大。
安装 loguru
pip install loguru2.编写日志中间件代码
日志中间件.
import json
import os
import sys
from datetime import datetime, timedelta, timezone
from fastapi import Response
from loguru import logger
from starlette.middleware.base import BaseHTTPMiddleware
from starlette.requests import Requestclass Logger_Middleware(BaseHTTPMiddleware):日志类.async def dispatch(self, request: Request, call_next) - Response:重写dispatch方法.Args:request (Request): Request.call_next (_type_): 回调函数.Returns:Response: Response.self.logger loggermethod request.method# body await request.body() # 请求体预留坑位path request.scope[path]http_type request.scope[type]china_tz timezone(timedelta(hours8), China)current_time_china datetime.now(china_tz)formatted_time current_time_china.strftime(%Y-%m-%d)response await call_next(request)self.logger.remove()code response.status_codeINFO f{code}__{method}__{path}# 判断请求的响应结果然后写入log文件if code ! 200:log_path os.path.join(./log/error, f{formatted_time}_error.log)self.logger.add(log_path,encodingutf-8,rotation7 days,enqueueTrue)self.logger.error(INFO)else:log_path os.path.join(./log/info, f{formatted_time}_info.log)self.logger.add(log_path,encodingutf-8,rotation7 days,enqueueTrue)self.logger.info(INFO)return response
3.注册到fastapi的服务中
from fastapi import FastAPI
from middlewares.logging_middleware import LoggingMiddleware# 初始化 FastAPI 应用
app FastAPI()# 添加日志中间件
app.middleware(http)(LoggingMiddleware())4.日志输出示例
2024-10-30 10:21:52.452 | INFO | middleware.log_middleware:dispatch:54 - 200__POST__/user/login
2024-10-30 10:23:43.225 | INFO | middleware.log_middleware:dispatch:54 - 200__POST__/user/login
2024-10-30 10:26:30.461 | INFO | middleware.log_middleware:dispatch:54 - 200__POST__/user/login
2024-10-30 10:30:21.039 | INFO | middleware.log_middleware:dispatch:54 - 200__POST__/user/login
2024-10-30 10:47:38.788 | INFO | middleware.log_middleware:dispatch:54 - 200__POST__/user/login
2024-10-30 10:47:51.864 | INFO | middleware.log_middleware:dispatch:54 - 200__POST__/user/login
2024-10-30 10:48:51.512 | INFO | middleware.log_middleware:dispatch:54 - 200__POST__/user/login
2024-10-30 10:49:47.051 | INFO | middleware.log_middleware:dispatch:54 - 200__POST__/user/login
2024-10-30 10:49:50.098 | INFO | middleware.log_middleware:dispatch:54 - 200__POST__/user/login
2024-10-30 10:53:17.336 | INFO | middleware.log_middleware:dispatch:54 - 200__POST__/user/login
2024-10-30 10:53:36.034 | INFO | middleware.log_middleware:dispatch:54 - 200__POST__/user/login
2024-10-30 10:54:30.589 | INFO | middleware.log_middleware:dispatch:54 - 200__POST__/user/login