实现方式:
采用 loguru 模块、跟flask直接挂载到app上有区别,当然也可以尝试去这样做、
但是 好像没有这个必要、要的就是个快速、整那些子虚乌有的东西完全木有意义。
1、首先是去项目git溜达一圈:https://github.com/Delgan/loguru
发现是英文。。。 木得感情、
然后百度百度吧,还好python大神们都挺友好。
百度一下 :python loguru 。。问题解决
https://www.cnblogs.com/g2thend/p/12539923.html
https://www.cnblogs.com/ice-coder/p/12821326.html
2、首先肯定是模块安装了
pip install loguru
3、结合到FastAPI 项目、其实老简单了。
1)搞个单独的日志管理模块
2)日志内容配置
3)项目模块引用、完活 !!!
1)日志配置模块: 创建extensionslogger.py,什么位置/名称的无所谓、只要能够被引用就行
2)配置日志内容 : 应该都能看懂、看不懂自己百度去吧。
import os import time from loguru import logger basedir = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) print(f"log basedir{basedir}") # /xxx/python_code/FastAdmin/backend/app # 定位到log日志文件 log_path = os.path.join(basedir, 'logs') if not os.path.exists(log_path): os.mkdir(log_path) if not os.path.exists(log_path): os.mkdir(log_path) log_path_all = os.path.join(log_path, f'{time.strftime("%Y-%m-%d")}_log.log') log_path_error = os.path.join(log_path, f'{time.strftime("%Y-%m-%d")}_error.log') # 日志简单配置 # 具体其他配置 可自行参考 https://github.com/Delgan/loguru logger.add(log_path_all, rotation="12:00", retention="5 days", enqueue=True) logger.add(log_path_error, rotation="12:00", retention="5 days", enqueue=True,level='ERROR') # 日志等级分割 # format 参数: {time} {level} {message}、 {time:YYYY-MM-DD at HH:mm:ss} | {level} | {message} 记录参数 # level 日志等级 # rotation 参数:1 week 一周、00:00每天固定时间、 500 MB 固定文件大小 # retention 参数: 10 days 日志最长保存时间 # compression 参数: zip 日志文件压缩格式 # enqueue 参数 True 日志文件异步写入 # serialize 参数: True 序列化json # encoding 参数: utf-8 字符编码、部分情况会出现中文乱码问题 # logger.info('If you are using Python {}, prefer {feature} of course!', 3.6, feature='f-strings') 格式化输入内容 # 可通过等级不同对日志文件进行分割储存
3)项目模块引用:
from fastapi import FastAPI,Form,Query,UploadFile,File,Request from pydantic import BaseModel,Field from typing import Optional,List import os,sys,time from extensions.logger import logger ''' 虚拟环境切换: conda activate FastAPI FastAPI 程序启动 :uvicorn manger:app --port 7777 --reload ''' app = FastAPI() @logger.catch # 异常记录装饰器、放到下面好像不行、应该是异步的关系。 def my_function(x, y, z): return [x,y,z] @app.post('/') async def root(data:dict): # get 请求 logger.debug(f"这是日志!") logger.info('这是user接口:username={},当前时间戳为:{tiems}',data["username"], tiems=time.time()) my_function(0,0) return {'message':'Hello World!'}
完活!!!!
太特么简单了,有木有、