Fastapi使用uvicorn将日志和控制台打印输出到文件 loguru

本文介绍了如何在Fastapi应用中使用uvicorn将日志和控制台输出记录到文件,通过loguru模块实现。文章详细阐述了解决问题的过程,包括创建配置文件、拓展文件以及在Fastapi初始化时设置loguru。最后验证了日志功能在路由中的正常使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题过程

  • 使用Github搜索,没有找到方法。
  • 在官方文档中查找,并进行搜索。没有找到内容。
  • google & 百度,都没有找到任何信息。
  • 在bleepcoder中找到类似的问题,测试ok 👉问题链接

解决过程

此方法需要用到loguru模块,没有安装的小伙伴请 pip install loguru
废话不多说,直接开始操作

创建配置文件

为了方便配置,创建一个配置文件来储存需要用到的参数,觉得没必要的话可以直接跳过这一步使用参数。
这里的的日志文件会按照创建时的日期生成文件名。

import os
import time


# -----------------------系统调试------------------------------------
DEBUG = True
# -----------------------日志-----------------------------------------
LOG_DIR = os.path.join(os.getcwd(), f'application\log\{time.strftime("%Y-%m-%d")}.log')
LOG_FORMAT = '<level>{level: <8}</level>  <green>{time:YYYY-MM-DD HH:mm:ss.SSS}</green> - <cyan>{name}</cyan>:<cyan>{function}</cyan> - <level>{message}</level>'

创建拓展文件

原方法为了方便演示将所有代码集成到了一个main之中,我们将部分内容拆开单独形成文件,避免主程序过于臃肿,也便于修改和调试。
此文件定义了日志处理方法

创建一个cusotm_log.py内容如下,这里导入了一个config模块,大家如果没有的话可以直接使用参数

import logging
from loguru import logger
from ..config import config
from loguru._defaults import LOGURU_FORMAT


class InterceptHandler(logging.Handler):
    def emit(self, record):
        # Get corresponding Loguru level if it exists
        try:
            level = logger.level(record.levelname).name
        except ValueError:
            level = record.levelno

        # Find caller from where originated the logged message
        frame, depth = logging.currentframe(), 2
        while frame.f_code.co_filename == logging.__file__:
            frame = frame.f_back
            depth += 1

        logger.opt(depth=depth, exception=record.exc_info).log(
            level, record.getMessage()
        )


def format_record(record: dict) -> str:
    format_string = config.LOG_FORMAT

    if record["extra"].get("payload") is not None:
        record["extra"]["payload"] = pformat(
            record["extra"]<
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值