Python基于yaml文件配置logging日志过程解析

方予
方予
发布时间:2026-10-14| 4人浏览过
原创

本文解析如何在Python中利用yaml文件配置logging模块。通过dictConfig读取字典配置,定义formatters格式化样式、handlers处理策略及loggers实例。重点说明根记录器与子记录器的handler继承关系,以及通过设置propagate属性解决日志重复输出的问题,帮助开发者实现灵活的日志管理。

使用dictConfig加载配置

首先,利用logging.config.dictConfig()函数从配置文件中加载日志配置,该函数接收一个字典类型的参数作为配置源。

Python代码实现


with open(file="./loggingconfigyaml.yaml", mode='r', encoding="utf-8")as file:
    logging_yaml = yaml.load(stream=file, Loader=yaml.FullLoader)
    # print(logging_yaml)
    # 配置logging日志:主要从文件中读取handler的配置、formatter(格式化日志样式)、logger记录器的配置
    logging.config.dictConfig(config=logging_yaml)
  # 获取根记录器:配置信息从yaml文件中获取
  root = logging.getLogger()
  # 子记录器的名字与配置文件中loggers字段内的保持一致
  my_module = logging.getLogger("my_module")
  print("rootlogger:", root.handlers)
  print("selflogger", my_module.handlers)
  # print("子记录器与根记录器的handler是否相同:", root.handlers[0] == my_module.handlers[0])
  my_module.error("DUBUG")
  root.info("INFO")
  root.error('ERROR')
  root.debug("rootDEBUG")

YAML配置文件详解

接下来,详细解析yaml配置文件的具体结构与内容。

YAML配置示例


version: 1
# 将信息传播到配置文件的跟日志记录器中
disable_existing_loggers: False

formatters:
  simple:
    format: "%(asctime)s - %(filename)s -%(name)s -%(levelname)s - %(message)s"
handlers:
  console:
    class: logging.StreamHandler
    level: DEBUG
    formatter: simple
    stream: ext://sys.stdout

  info_file_handler:
    class: logging.handlers.RotatingFileHandler
    level: INFO
    formatter: simple
    filename: ./info.log
    maxBytes: 10485760 # 10MB
    backupCount: 20
    encoding: utf8

  # error_file_handler:
    # class: logging.handlers.RotatingFileHandler
    # level: ERROR
    # formatter: simple
    # filename: ./info.log
    # maxBytes: 10485760 # 10MB
    # backupCount: 20
    # encoding: utf8
loggers:
  my_module:
    level: ERROR
    handlers: [console]
    # 打开日志记录器
    propagate: False
root:
  level: DEBUG
  handlers: [console, info_file_handler]

配置项说明

配置说明如下:

1、formatters部分定义了日志输出的格式化样式;handlers部分指定了日志的处理方式,包括输出位置(class字段,logging模块内置StreamHandler和FileHandler,其他处理器位于logging.handlers模块)、处理日志的级别(level字段)以及应用的格式化样式(formatter字段)。

2、loggers部分设置了自定义的logger实例。在代码中,通过logging.getLogger("与配置文件中logger名称一致的字符串")获取对应的配置。需要注意日志级别、子记录器的handler配置:若子记录器与根记录器共享handler,日志可能打印两次;若多个handler指向相同位置且class相同,同样会导致重复输出。此时,将logger的propagate属性设为False,可禁止日志消息向父级记录器传播,从而避免重复。root部分则配置根记录器,包括日志级别和handler列表(多个handler时使用列表存储)。

以上即为Python基于yaml配置logging日志的核心内容,希望能为读者的学习提供参考,欢迎继续支持本站。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。