推荐答案
在 FastAPI 中配置日志可以通过 Python 的标准 logging 模块来实现。以下是一个简单的配置示例:
// www.javascriptcn.com code example
import logging
from fastapi import FastAPI
# 配置日志
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
handlers=[
logging.FileHandler("app.log"),
logging.StreamHandler()
]
)
app = FastAPI()
@app.get("/")
def read_root():
logging.info("Root endpoint accessed")
return {"message": "Hello World"}在这个示例中,我们使用 logging.basicConfig 来配置日志级别、格式和输出位置。日志级别设置为 INFO,格式包括时间、日志名称、日志级别和消息。日志会同时输出到文件 app.log 和控制台。
本题详细解读
1. 日志级别
日志级别决定了哪些日志消息会被记录。常见的日志级别有:
DEBUG: 详细的调试信息。INFO: 确认程序按预期运行。WARNING: 表示潜在的问题。ERROR: 更严重的问题,程序可能无法执行某些功能。CRITICAL: 严重的错误,程序可能无法继续运行。
在示例中,我们使用 INFO 级别,这意味着 INFO 及以上级别的日志消息(如 WARNING, ERROR, CRITICAL)都会被记录。
2. 日志格式
日志格式决定了日志消息的输出样式。常用的格式字段包括:
%(asctime)s: 日志记录的时间。%(name)s: 日志记录器的名称。%(levelname)s: 日志级别。%(message)s: 日志消息。
在示例中,我们使用了 "%(asctime)s - %(name)s - %(levelname)s - %(message)s" 格式,这样每条日志消息都会包含时间、日志名称、级别和消息。
3. 日志输出位置
日志可以输出到多个位置,常见的有:
- 文件:使用
logging.FileHandler。 - 控制台:使用
logging.StreamHandler。
在示例中,我们同时使用了 FileHandler 和 StreamHandler,因此日志会同时写入 app.log 文件并输出到控制台。
4. FastAPI 集成
FastAPI 本身并不提供专门的日志配置功能,但它完全兼容 Python 的标准 logging 模块。因此,你可以像在普通 Python 应用中一样配置日志。
在示例中,我们在 FastAPI 应用启动前配置了日志,这样在应用运行期间的所有日志都会按照配置进行处理。
5. 日志记录
在 FastAPI 的路由处理函数中,你可以使用 logging 模块记录日志。例如,在 read_root 函数中,我们使用 logging.info 记录了一条信息日志。
@app.get("/")
def read_root():
logging.info("Root endpoint accessed")
return {"message": "Hello World"}当访问根路径 / 时,日志中会记录一条 INFO 级别的消息,内容为 "Root endpoint accessed"。