1. 程式人生 > 實用技巧 >【FastAPI 學習 四】 日誌配置

【FastAPI 學習 四】 日誌配置

FastAPI 中日誌的配置

本系列部落格是配合Vue開發一套後臺管理系統,對應的Vue教程見個人部落格
https://www.charmcode.cn/

在Python中內建了logging模組, 但是配置有丟丟麻煩。

於是有人開發了這樣的一個日誌擴充套件庫loguru

我很喜歡它 Github地址 https://github.com/Delgan/loguru

loguru 使用

自己看官網
http://loguru.readthedocs.io/

或者GitHub README.md的演示,基本就夠了

整合到FastAPI

本來是想 像flask那樣把日誌物件掛載到app物件上,作者建議直接使用全域性物件

issues https://github.com/tiangolo/fastapi/issues/81#issuecomment-473677039

所以了,我是在專案中,直接新建了一個資料夾extensions/專門存放擴充套件檔案
然後在檔案目錄下建立了extensions/logger.py檔案, 簡單配置

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)

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_error, rotation="12:00", retention="5 days", enqueue=True)

使用

使用也是特別方便的

# 得先在 extensions/__init__.py匯入logger 才可以這樣匯入logger
from extensions import logger
logger.debug(f"日誌記錄")
logger.info(f"日誌記錄")
logger.error(f"xxx")

日誌小技巧

使用官方內建的庫traceback能幫你更加詳細的列印錯誤棧。

import traceback

logger.error(traceback.format_exc())

Sentry

專案複雜後,可以考慮用這個Sentry日誌處理系統。

https://docs.sentry.io/platforms/python/guides/asgi/


https://www.starlette.io/middleware/
可參考 starlette middleware 使用

對應GitHub地址

https://github.com/CoderCharm/fastapi-mysql-generator

見個人部落格 https://www.charmcode.cn/article/2020-07-12_FastAPI_logger