Ist*_*van 5 python logging fastapi
我有一个 api.py 文件,其中包含以下内容:
from fastapi import FastAPI
import logging
import uvicorn
app = FastAPI(title="api")
LOG = logging.getLogger(__name__)
LOG.info("API is starting up")
LOG.info(uvicorn.Config.asgi_version)
@app.get("/")
async def get_index():
LOG.info("GET /"
return {"Hello": "Api"}
Run Code Online (Sandbox Code Playgroud)
该应用程序在本地运行:
uvicorn api:app --reload
Run Code Online (Sandbox Code Playgroud)
INFO: Will watch for changes in these directories: ['/Users/user/code/backend/api']
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [44258] using StatReload
INFO: Started server process [44260]
INFO: Waiting for application startup.
INFO: Application startup complete.
Run Code Online (Sandbox Code Playgroud)
它不记录任何启动消息。
稍后向 api 发送 http 请求时:
INFO: 127.0.0.1:50538 - "POST /api/v1/endpoint HTTP/1.1" 200 OK
Run Code Online (Sandbox Code Playgroud)
在函数体中,有 LOG.info("example") 也没有被记录。
有没有一种方法可以使 FastAPI 日志记录与 Uvicorn 一起工作并且也在生产中工作(独立于 Uvicorn 等执行环境)。
确保添加StreamHandler和/或FileHandler并设置级别/严重性(即DEBUG、INFO、WARNING等)。以下示例基于此答案和此答案。更多详细信息和示例可以在 Python 的官方文档页面中找到。您可能还想查看可用于格式化日志记录的所有可用LogRecord属性。
from fastapi import FastAPI
import logging
import sys
app = FastAPI(title='api')
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
stream_handler = logging.StreamHandler(sys.stdout)
log_formatter = logging.Formatter("%(asctime)s [%(processName)s: %(process)d] [%(threadName)s: %(thread)d] [%(levelname)s] %(name)s: %(message)s")
stream_handler.setFormatter(log_formatter)
logger.addHandler(stream_handler)
logger.info('API is starting up')
@app.get('/')
async def main():
logger.info('GET /')
return 'ok'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9345 次 |
| 最近记录: |