實現環境:Python-3.7, fastapi-0.64.0,uvicorn-0.13.4
目錄結構
--config.py
--logger.py
--main.py
--log.log
具體代碼:
config.py
主要是進行日志功能的相關環境的設置
import os import pathlib BACKEND_PATH = pathlib.Path(__file__).parent.parent SUPER_USER = 1 class Config: LOGGING_FILE_D = os.path.dirname(os.path.dirname(__file__)) LOGGING_FILE_DIR = os.path.join(LOGGING_FILE_D) LOGGING_FILE_NAME = 'log.log' LOGGING_FILE_PATH = os.path.join(LOGGING_FILE_DIR, LOGGING_FILE_NAME) LOGGING_LEVEL = 'INFO' # LOGGING_FORMAT = '{time} [{level}] {message}' LOGGING_FORMAT = "%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s" settings = Config()
logger.py
主要是對 Python 原始的 logging 模塊進行封裝
import os import sys import time import logging from config import settingsclass Logger: def __init__(self, set_level="INFO", name=os.path.split(os.path.splitext(sys.argv[0])[0])[-1], use_console=True): """ :param set_level: 日志級別["NOTSET"|"DEBUG"|"INFO"|"WARNING"|"ERROR"|"CRITICAL"],默認為INFO :param name: 日志中打印的name,默認為運行程序的name :param log_name: 日志文件的名字,默認為當前時間(年-月-日.log) :param log_path: 日志文件夾的路徑,默認為logger.py同級目錄中的log文件夾 :param use_console: 是否在控制台打印,默認為True """ if not set_level: set_level = self._exec_type() # 設置set_level為None,自動獲取當前運行模式 self.__logger = logging.getLogger(name) self.setLevel( getattr(logging, set_level.upper()) if hasattr(logging, set_level.upper()) else logging.INFO) # 設置日志級別 if not os.path.exists(settings.LOGGING_FILE_DIR): # 創建日志目錄 os.makedirs(settings.LOGGING_FILE_DIR) formatter = logging.Formatter(settings.LOGGING_FORMAT) handler_list = list() handler_list.append(logging.FileHandler(settings.LOGGING_FILE_PATH, encoding="utf-8")) if use_console: handler_list.append(logging.StreamHandler()) for handler in handler_list: handler.setFormatter(formatter) self.addHandler(handler) def __getattr__(self, item): return getattr(self.logger, item) @property def logger(self): return self.__logger @logger.setter def logger(self, func): self.__logger = func def _exec_type(self): return "DEBUG" if os.environ.get("IPYTHONENABLE") else "INFO"
main.py
對封裝的logger進行調用
from fastapi import FastAPI import uvicorn import logger _logger = logger.Logger('info') app = FastAPI() @app.get('/') def get_a(): _logger.info('sss') return 'a' if __name__ == '__main__': uvicorn.run(app, host='127.0.0.1', port=8000)
log.log 打印內容如下
2021-05-08 13:43:07,409 - mian.py[line:11] - INFO: sss 2021-05-08 13:43:08,611 - mian.py[line:11] - INFO: sss 2021-05-08 13:43:10,138 - mian.py[line:11] - INFO: sss