企业级FastAPI后端模板搭建(三)整合日志Log

整合日志Log

下载loguru

shell 复制代码
pip install loguru

创建log/log.py文件,代码如下:

python 复制代码
import os
import sys

from loguru import logger as loguru_logger

from settings import settings

class LoggingConfig:
  """统一日志配置管理"""

  def __init__(self) -> None:
    self.debug = settings.DEBUG
    self.level = "DEBUG" if self.debug else "INFO"
    self.log_dir = "logs"
    self.ensure_log_dir()

  def ensure_log_dir(self):
    """确保日志目录存在"""
    if not os.path.exists(self.log_dir):
      os.makedirs(self.log_dir, exist_ok=True)

  def get_log_format(self):
    """获取统一的日志格式"""
    return (
      "<green>{time:YYYY-MM-DD HH:mm:ss.SSS}</green> | "
      "<level>{level: <8}</level> | "
      "<cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> | "
      "<level>{message}</level>"
    )

  def get_file_format(self):
    """获取文件日志格式(无颜色)"""
    return (
      "{time:YYYY-MM-DD HH:mm:ss.SSS} | "
      "{level: <8} | "
      "{name}:{function}:{line} | "
      "{message}"
    )

  def setup_logger(self):
    """配置日志输出"""
    # 清除默认处理器
    loguru_logger.remove()

    # 控制台输出(带颜色)
    loguru_logger.add(
      sink=sys.stdout,
      level=self.level,
      format=self.get_log_format(),
      colorize=True,
      backtrace=True,
      diagnose=True,
    )

    # 文件输出 - 所有级别日志
    loguru_logger.add(
      sink=f"{self.log_dir}/backend_{{time:YYYY-MM-DD}}.log",
      level="DEBUG",
      format=self.get_file_format(),
      rotation="100 MB",
      retention="30 days",
      compression="zip",
      encoding="utf-8",
      backtrace=True,
      diagnose=True,
    )

    # 错误日志单独文件
    loguru_logger.add(
      sink=f"{self.log_dir}/backend_error_{{time:YYYY-MM-DD}}.log",
      level="ERROR",
      format=self.get_file_format(),
      rotation="50 MB",
      retention="90 days",
      compression="zip",
      encoding="utf-8",
      backtrace=True,
      diagnose=True,
    )

    # 为所有日志添加默认上下文
    # 注意:这里重新绑定会创建新的logger实例

    # 记录日志系统启动
    loguru_logger.info("日志系统已启动")

    return loguru_logger

# 全局日志配置实例
logging_config = LoggingConfig()
logger = logging_config.setup_logger()

创建log/__init__.py文件,代码如下:

python 复制代码
from .log import logger, logging_config

__all__ = [
  "logger",
  "logging_config",
]

修改main.py文件:

python 复制代码
from fastapi import FastAPI
from core.init_app import register_routers

from log import logger

app = FastAPI()

logger.info("log test")

register_routers(app, prefix="/api")
相关推荐
vx_Biye_Design5 分钟前
springboot小学生英语学习APP62773-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·python·学习·课程设计
打工仔折腾 AI18 分钟前
用UU远程把家里电脑变成AI Agent常驻服务器:CLI、端口映射与代理实测
运维·服务器·人工智能·后端·python·电脑·ai agent 实战
imDwAaY19 分钟前
Redis 也能做消息队列?从 Stream 的存储讲到消费确认
数据库·redis·缓存
@Mike@28 分钟前
13-数据库学习笔记(查询执行处理模型)
数据库·笔记·学习
泡海椒35 分钟前
JQuick-Excel dateFormat 转换实战:日期值与 FORMAT 显示格式的边界
开发语言·python·excel
念越39 分钟前
接口自动化测试从入门到实战:接口用例设计、Requests、Pytest、YAML、JSON Schema 与 Allure 报告
python·测试工具·自动化·json·pytest
言乐643 分钟前
Python贪心算法实现搜索推荐
python·django·virtualenv·pygame·tornado
benchmark_cc1 小时前
A股量化尾盘筛选对数据时效敏感:行情链路变慢时先排查哪里?
python·数据分析·pandas·量化交易·股票数据·quantdash
弈栈录1 小时前
MySQL 事务、索引与锁:后端开发必须掌握的数据库基础
数据库·后端
9624561 小时前
餐饮 SaaS 优惠券系统架构演进(三):优惠计算引擎——商品级计价、冲突策略与优惠分摊
java·数据库·spring boot