简单描述
- fastapi的简单实战,且用uvicorn将日志同时输出到控制台和日志文件中
main.py
import signal
import sys
from contextlib import asynccontextmanager
from fastapi import FastAPI
import uvicorn
from fastapi.staticfiles import StaticFiles
from settings import settings
from routers.xxx import xxx_router
from common.logging import logger
@asynccontextmanager
async def lifespan(app: FastAPI):
logger.info("Starting up...")
yield
logger.info("Shutting down...")
app = FastAPI(lifespan=lifespan,
debug=settings.debug,
title="xxx平台",
description='xxx',
version='1.0.0',
docs_url='/docs',
redoc_url='/redoc',
)
app.mount("/static", StaticFiles(directory=settings.static_dir), name="static")
app.include_router(xxx_router, prefix="/api/xxx", tags=["xxx"])
@app.get("/")
def read_root():
return {
"data": "welcome to xxx center"}
def signal_handler(sig, frame):
print(f'Received Ctrl+C! {
sig} exiting...')
sys.exit()
def run_http():
signal.signal(signal.SIGINT, signal_handler)
signal.signal(signal.SIGTERM, signal_handler)
uvicorn.run(app="main:app", host=settings.server_ip, port=settings.server_port,
log_config="uvicorn_config.json",
log_level=settings.log_level, workers=settings.workers)
if __name__ == "__main__":
run_http()