FastAPI接口¶
Logfire 将 FastAPI 的自定义和第三方工具与 logfire.instrument_fastapi()
方法。
安装¶
使用 fastapi
extra 安装 logfire
:
pip install 'logfire[fastapi]'
rye add logfire -E fastapi
poetry add 'logfire[fastapi]'
用法¶
我们下面有一个最小的例子。请安装 Uvicorn 来运行它:
pip install uvicorn
您可以使用 python main.py
运行它:
import logfire
from fastapi import FastAPI
app = FastAPI()
logfire.configure()
logfire.instrument_fastapi(app)
@app.get("/hello")
async def hello(name: str):
return {"message": f"hello {name}"}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app)
然后访问 http://localhost:8000/hello?name=world 并检查日志。
OpenTelemetry FastAPI 插桩¶
第三方 OpenTelemetry FastAPI Instrumentation 包为每个请求添加了跨度,其中包含有关 HTTP 请求的详细属性,例如完整 URL 和用户代理。通过开始和结束时间,您可以查看处理每个请求所需的时间。
[logfire.instrument_fastapi()]
[logfire.默认情况下,Logfire.instrument_fastapi] 应用此检测。您可以通过传递 use_opentelemetry_instrumentation=False
来禁用它。
logfire.instrument_fastapi()
还接受任意附加关键字参数,并将它们传递给 OpenTelemetry FastAPIInstrumentor.instrument_app()
方法。有关更多详细信息,请参阅其文档。
Logfire插桩:记录端点参数和验证错误¶
logfire.instrument_fastapi()
将为每个请求发出一个称为 FastAPI 参数
的跨度,该跨度显示 FastAPI 解析和验证请求中的端点函数参数并解决任何依赖项所需的时间。默认情况下,跨度还将包含以下属性:
-
values
:将端点函数的参数名称映射到已解析和已验证的值的字典。 -
errors
:任何无效输入的验证错误列表。
您可以通过将 request_attributes_mapper
函数传递给 instrument_fastapi
来自定义此函数。此函数将与 Request
或 WebSocket
对象以及默认属性字典一起调用。它应该返回一个新的属性字典,或者返回 None
将跨度级别设置为“debug”,以便默认情况下它是隐藏的。例如:
import logfire
app = ...
def request_attributes_mapper(request, attributes):
if attributes["errors"]:
# Only log validation errors, not valid arguments
return {
"errors": attributes["errors"],
"my_custom_attribute": ...,
}
else:
# Don't log anything for valid requests
return None
logfire.configure()
logfire.instrument_fastapi(app, request_attributes_mapper=request_attributes_mapper)
注意
request_attributes_mapper
函数不得更改值
或错误
的内容,但它可以安全地用新值替换它们。
从检测中排除 URL¶
为避免跟踪某些 URL,您可以指定一串逗号分隔的正则表达式,该正则表达式将与完整的请求 URL 匹配。这可以传递给:
-
instrument_fastapi
如excluded_urls
,例如:logfire.instrument_fastapi(app, excluded_urls='/health')
-
环境变量
OTEL_PYTHON_FASTAPI_EXCLUDED_URLS
。 -
环境变量
OTEL_PYTHON_EXCLUDED_URLS
(这也适用于其他检测)。
捕获请求和响应标头¶
本文总阅读量次