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

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

本文解析如何在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 相关产品和应用

全部下载

专题列表