Fastapi 日志处理

uvicorn 日志处理总结:

一、日志的结构

日志结构如下:

{
   
   
    "version": 1,
    "disable_existing_loggers": false,
    "formatters": {
   
   },
    "handlers": {
   
   },
    "loggers": {
   
   }
}

loggers 用于定义日志处理最顶层的标识,必须有一个uvicorn,是所有日志处理的父类

handlers用于日志输出目的地配置,如输出到终端、文件等

formatters用于日志具体格式的配置,如时间戳、请求类型、状态码等

二、logger中配置的继承关系

logger中存在继承关系,uvicorn是父类,uvicorn.error是子类 uvicorn也是子类。子类可以继承父类的配置,比如uvicorn.error没有配置handlers,那么就会继承uvicorn的配置。

uvicorn 记录器会处理所有 Uvicorn 生成的日志,包括错误日志。

"uvicorn": {
   
   
            "handlers": ["default", "default_file"],
            "level": "INFO",
            "propagate": false
        },
        "uvicorn.error": {
   
   
            "level": "INFO"
        },
        "uvicorn.access": {
   
   
            "handlers": ["access", "access_file"],
            "level": "INFO",
            "propagate": false
        }
    }

三、formatters 中的两种错误日志

formatters 中包含两种日志格式:default 和 access,两者功能不同。这两者是uvicorn默认,也可以自定义其他格式。

  • default: 用于记录 Uvicorn 的常规日志,包括服务器启动、停止、错误信息等。
  • access:用于记录 HTTP 请求的访问日志,包括客户端 IP、请求方法、请求路径、响应状态码等。

四、错误日志

uvicorn 会在default中将所有的日志都输出,包括错误日志。如果想单独处理错误日志,可以在loggers中定义错误日志记录器uvicorn.error,然后在handlers中指定错误日志的输出目的地,最后使用default格式输出。可以选择将错误日志同时输出到uvicorn和uvicorn.error两个记录器中,也可以选择只输出到uvicor.error记录器中。

uvicorn 日志系统

Uvicorn 的日志配置文件可以使用 JSON、YAML 或 INI 三种格式。以下是对 Uvicorn 日志配置文件的详细解析:

1. 基本结构

Uvicorn 的日志配置文件遵循 Python 的 logging 模块的配置格式,其基本结构如下:

{
   
   
    "version": 1,
    "disable_existing_loggers": false,
    "formatters": {
   
   },
    "handlers": {
   
   },
    "loggers": {
   
   }
}

2. 配置项详解

2.1 version
  • 类型: 整数
  • 默认值: 1
  • 说明: 指定配置文件的版本,目前 Uvicorn 只支持版本 1。
2.2 disable_existing_loggers
  • 类型: 布尔值
  • 默认值: false
  • 说明: 是否禁用已存在的日志记录器。如果设置为 true,则会禁用所有已存在的日志记录器,除非它们在 loggers 部分被显式配置。
2.3 formatters
  • 类型: 字典
  • 说明: 定义日志格式化器,用于格式化日志消息。每个格式化器是一个字典,包含以下键:
    • (): 指定格式化器类的路径。
    • fmt: 日志格式字符串。
    • datefmt: 日期格式字符串(可选)。
    • style: 格式化风格,可以是 %{ $(可选)。

例如:

"formatters": {
   
   
    "default": {
   
   
        "()": "uvicorn.logging.DefaultFormatter",
        "fmt": "%(asctime)s %(threadName)s %(levelprefix)s  %(message)s",
        "use_colors": null
    },
    "access": {
   
   
        "()": "uvicorn.logging.AccessFormatter",
        "fmt": "%(asctime)s %(threadName)s %(levelprefix)s %(client_addr)s - '%(request_line)s' %(status_code)s"
    }
}
2.4 handlers
  • 类型: 字典
  • 说明: 定义日志处理器,用于将日志消息输出到不同的目的地。每个处理器是一个字典,包含以下键:
    • class: 指定处理器类的路径。
    • formatter: 指定使用的格式化器名称。
    • stream: 指定输出流(对于 StreamHandler)。
    • filename: 指定日志文件路径(对于 FileHandlerTimedRotatingFileHandler)。
    • when: 指定日志文件轮转的时间间隔(对于 TimedRotatingFileHandler)。
    • backupCount: 指定备份文件的数量(对于 TimedRotatingFileHandler)。
    • encoding: 指定文件编码(可选)。

例如:

"handlers": {
   
   
    "default": {
   
   
        "formatter": "default",
        "class": "logging.StreamHandler",
        "stream": "ext://sys.stderr"
    },
    "default_file": {
   
   
        "formatter": "default",
        "class": "logging.handlers.TimedRotatingFileHandler",
        "filename": "./logs/app.log",
        "when": "midnight",
        "encoding": "utf-8",
        "backupCount": 10
    },
    "access": {
   
   
        "formatter": "access",
        "class":
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值