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

如何在FastAPI中查看Invalid HTTP Request received的详细日志?

解决Uvicorn「Invalid HTTP request received.」警告无详细日志的问题

核心原因

这个警告是Uvicorn的HTTP解析器输出的,默认日志格式未包含请求IP、时间等元数据,需要自定义Uvicorn的日志配置来补充这些信息。

具体解决方案

方法1:命令行启动时指定日志格式

直接在启动命令中通过--log-format参数自定义日志格式,包含所需字段:

uvicorn main:app --host 0.0.0.0 --port 8000 --log-format "%(levelname)s: %(asctime)s - %(client_addr)s - %(message)s"

各字段说明:

  • %(levelname)s:日志级别(如WARNING)
  • %(asctime)s:日志生成时间
  • %(client_addr)s:请求客户端的IP和端口
  • %(message)s:原警告内容

方法2:通过日志配置文件自定义

创建logging.conf文件,配置更精细的日志规则:

[loggers]
keys=root,uvicorn,uvicorn.error

[handlers]
keys=console

[formatters]
keys=default

[logger_root]
level=INFO
handlers=console

[logger_uvicorn]
level=INFO
handlers=console
propagate=0
qualname=uvicorn

[logger_uvicorn.error]
level=WARNING
handlers=console
propagate=0
qualname=uvicorn.error

[handler_console]
class=StreamHandler
formatter=default
args=(sys.stdout,)

[formatter_default]
format=%(levelname)s: %(asctime)s - %(client_addr)s - %(message)s
datefmt=%Y-%m-%d %H:%M:%S

启动时指定该配置文件:

uvicorn main:app --host 0.0.0.0 --port 8000 --log-config logging.conf

方法3:代码中启动Uvicorn时配置日志

如果通过Python代码直接启动Uvicorn,可在代码内传入自定义日志配置:

import uvicorn
from fastapi import FastAPI

app = FastAPI()

# 覆盖默认日志格式
log_config = uvicorn.config.LOGGING_CONFIG
log_config["formatters"]["default"]["fmt"] = "%(levelname)s: %(asctime)s - %(client_addr)s - %(message)s"
log_config["formatters"]["default"]["datefmt"] = "%Y-%m-%d %H:%M:%S"

if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", port=8000, log_config=log_config)

验证效果

配置完成后,再次收到无效HTTP请求时,日志会输出类似内容:

WARNING: 2024-05-20 14:30:00 - 192.168.1.100:54321 - Invalid HTTP request received.

内容的提问来源于stack exchange,提问作者AIRGG

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 11:01:03