FastAPI logger日志记录方案 loguru模块

实现方式:

采用 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!'}

      完活!!!!

太特么简单了,有木有、

原文地址:https://www.cnblogs.com/yc-c/p/14519142.html