You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Uvicorn日志样式?基于FastAPI开发Discord API封装场景

自定义Uvicorn日志样式的解决方案

Uvicorn基于Python标准logging模块实现日志,不用替换成rich、loguru这类独立日志库,直接通过自定义Formatter和修改Uvicorn的日志配置就能适配需求。

步骤1:自定义日志Formatter

写一个继承自logging.Formatter的类,根据需求定义日志输出格式,比如添加颜色、自定义字段:

import logging

class CustomUvicornFormatter(logging.Formatter):
    # 定义日志级别对应的颜色转义码
    COLOR_MAP = {
        logging.DEBUG: '\033[94m',  # 蓝色
        logging.INFO: '\033[92m',   # 绿色
        logging.WARNING: '\033[93m', # 黄色
        logging.ERROR: '\033[91m',   # 红色
        logging.CRITICAL: '\033[95m' # 紫色
    }
    RESET_CODE = '\033[0m'

    def format(self, record):
        # 给日志级别添加颜色
        color = self.COLOR_MAP.get(record.levelno, self.RESET_CODE)
        record.levelname = f"{color}{record.levelname}{self.RESET_CODE}"
        
        # 自定义日志输出格式,可按需调整字段
        fmt = "%(asctime)s | %(levelname)s | %(name)s | %(message)s"
        formatter = logging.Formatter(fmt, datefmt="%Y-%m-%d %H:%M:%S")
        return formatter.format(record)

步骤2:替换Uvicorn的日志Formatter

在启动FastAPI应用时,获取Uvicorn的日志Handler,替换成自定义的Formatter:

from fastapi import FastAPI
import uvicorn
import logging

app = FastAPI()

@app.get("/")
async def root():
    return {"message": "Hello World"}

def setup_uvicorn_logging():
    # 获取Uvicorn核心日志器和访问日志器
    uvicorn_logger = logging.getLogger("uvicorn")
    uvicorn_access_logger = logging.getLogger("uvicorn.access")
    
    # 遍历所有Handler,替换为自定义Formatter
    for logger in [uvicorn_logger, uvicorn_access_logger]:
        for handler in logger.handlers:
            handler.setFormatter(CustomUvicornFormatter())

if __name__ == "__main__":
    # 先配置日志,再启动Uvicorn
    setup_uvicorn_logging()
    uvicorn.run(app, host="0.0.0.0", port=8000)

额外说明

  • 如果需要输出结构化日志(比如JSON格式),只需修改CustomUvicornFormatter的format方法,用json.dumps将日志字段序列化为JSON即可。
  • 不要直接替换Uvicorn的logger或Handler,避免破坏原有日志逻辑,仅替换Formatter是最安全的适配方式。
  • 若通过命令行启动Uvicorn,可在启动脚本中先执行日志配置代码,再调用Uvicorn的启动函数。

内容的提问来源于stack exchange,提问作者DARK FLAME YT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 02:05:01