Python基于yaml文件配置logging日志过程解析
本文解析如何在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日志的核心内容,希望能为读者的学习提供参考,欢迎继续支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









