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: 指定日志文件路径(对于FileHandler或TimedRotatingFileHandler)。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":


7466

被折叠的 条评论
为什么被折叠?



