Python基于yaml文件配置logging日志过程解析
一、使用logging.config.dictConfig()函数读取配置信息,参数是字典类型
withopen(file="./loggingconfigyaml.yaml",mode='r',encoding="utf-8")asfile: 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配置文件
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模块的handler只有streamhandler和filehandler,剩下的handler在logging.handlers模块中)、处理程序需要处理的日志级别(level字段),日志输出样式(formatter)等。
2、loggers设置了自定义的logger实例,在程序中使用logging.getLogger(“名字与配置文件中的logger名字一致且是字符串形式”)函数获取配置文件中logger实例的配置信息,例如打印的日志级别、子记录器的handler(1:子记录器与根记录器有相同的handler时,打印输出的日志会出现两遍,2:记录器的handler有多个时,而且输出的位置相同且class字段相同,也会导致输出两遍;诸如此问题,将logger记录器的propagate属性设置为False,就会禁止将日志消息传递给父级记录器的处理程序中)等;root设置了根记录器的配置信息,例如打印的日志级别、记录器的handler(多个handler时用列表存储)等
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。