基础框架
import logging
import os
import uvicorn
from fastapi import FastAPI
from starlette.middleware.cors import CORSMiddleware
env = os.environ
# app = FastAPI(docs_url=None, redoc_url=None) # 用于禁用swagger文档
app = FastAPI()
# 日志配置
logger = logging.getLogger()
logger.setLevel(logging.INFO)
formatter = logging.Formatter(
"%(asctime)s - %(module)s - %(funcName)s - line:%(lineno)d - %(levelname)s - %(message)s"
)
# 输出到控制台
to_console = logging.StreamHandler()
to_console.setFormatter(formatter)
logger.addHandler(to_console)
# 输出到文件中
to_file = logging.FileHandler(filename="log.txt")
to_file.setFormatter(formatter)
logger.addHandler(to_file)
# 配置CORS
origins = [
"*"
]
app.add_middleware(
CORSMiddleware,
allow_origins=origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# def
if __name__ == '__main__':
# 启动服务
host = env.get("HOST") if env.get("HOST") is not None else "0.0.0.0"
port = int(env.get("PORT")) if env.get("PORT") is not None else 8000
uvicorn.run(app='api_service:app', host=host, port=port, reload=True)
Json请求
class ChatPdfRequest(BaseModel):
conversation_id: str
query: str
history: List[Tuple[str, str]]
@app.post("/ChatPdf", tags=["Chat"], summary="与llm模型对话")
async def chatpdf(
ChatPdfRequest: ChatPdfRequest = Body(..., content_type="application/json", description="对话信息")):
日志写入
# 日志记录器
logger = logging.getLogger()
# 设置日志级别,只有大于等于这个级别的日志才能输出
logger.setLevel(logging.ERROR) # 有DEBUG INFO WARRING ERROR CRITICAL
# 设置日志格式
formatter = logging.Formatter(
"%(asctime)s - %(module)s - %(funcName)s - line:%(lineno)d - %(levelname)s - %(message)s"
)
# 输出到控制台
to_console = logging.StreamHandler()
to_console.setFormatter(formatter)
logger.addHandler(to_console)
# 输出到文件中
to_file = logging.FileHandler(filename="log.txt")
to_file.setFormatter(formatter)
logger.addHandler(to_file)
更好的日志写入
def getLogger(name, file_name, use_formatter=True):
logger = logging.getLogger(name)
logger.setLevel(logging.INFO)
console_handler = logging.StreamHandler(sys.stdout)
formatter = logging.Formatter('%(asctime)s %(message)s')
console_handler.setFormatter(formatter)
console_handler.setLevel(logging.INFO)
logger.addHandler(console_handler)
if file_name:
handler = logging.FileHandler(file_name, encoding='utf8')
handler.setLevel(logging.INFO)
if use_formatter:
formatter = logging.Formatter('%(asctime)s - %(name)s - %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
return logger
logger = getLogger('ChatGLM', 'chatlog.log')