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


Posted in Python onJune 23, 2020

一、使用logging.config.dictConfig()函数读取配置信息,参数是字典类型

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配置文件

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时用列表存储)等

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
用Python编写web API的教程
Apr 30 Python
Python调用命令行进度条的方法
May 05 Python
Django中模版的子目录与include标签的使用方法
Jul 16 Python
Django框架中数据的连锁查询和限制返回数据的方法
Jul 17 Python
详解使用pymysql在python中对mysql的增删改查操作(综合)
Jan 18 Python
深入理解Django的中间件middleware
Mar 14 Python
Python中的groupby分组功能的实例代码
Jul 11 Python
python3.5绘制随机漫步图
Aug 27 Python
Pytorch中index_select() 函数的实现理解
Nov 19 Python
Python Selenium截图功能实现代码
Apr 26 Python
Python自动化xpath实现自动抢票抢货
Sep 19 Python
Jupyter notebook 不自动弹出网页的解决方案
May 21 Python
解决pytorch多GPU训练保存的模型,在单GPU环境下加载出错问题
Jun 23 #Python
Python 程序报错崩溃后如何倒回到崩溃的位置(推荐)
Jun 23 #Python
浅谈pytorch中的BN层的注意事项
Jun 23 #Python
Python3与fastdfs分布式文件系统如何实现交互
Jun 23 #Python
踩坑:pytorch中eval模式下结果远差于train模式介绍
Jun 23 #Python
pytorch掉坑记录:model.eval的作用说明
Jun 23 #Python
Python使用Selenium实现淘宝抢单的流程分析
Jun 23 #Python
You might like
PHP中数组的分组排序实例
2014/06/01 PHP
Php-Redis安装测试笔记
2015/03/05 PHP
Mac环境下php操作mysql数据库的方法分享
2015/05/11 PHP
Javascript类定义语法,私有成员、受保护成员、静态成员等介绍
2011/12/08 Javascript
Javascript异步编程的4种方法让你写出更出色的程序
2013/01/17 Javascript
js取得url地址参数实例
2013/02/22 Javascript
location对象的属性和方法应用(解析URL)
2013/04/12 Javascript
jQuery在html有效在jsp无效的原因及解决方法
2013/08/02 Javascript
jQuery内部原理和实现方式浅析
2015/02/03 Javascript
基于JavaScript实现手机短信按钮倒计时(超简单)
2015/12/30 Javascript
React服务端渲染(总结)
2017/07/01 Javascript
微信小程序 按钮滑动的实现方法
2017/09/27 Javascript
jQuery插件实现弹性运动完整示例
2018/07/07 jQuery
vue 使用微信jssdk,调用微信相册上传图片功能
2020/11/13 Javascript
Python写的创建文件夹自定义函数mkdir()
2014/08/25 Python
python使用mysql数据库示例代码
2017/05/21 Python
python下载图片实现方法(超简单)
2017/07/21 Python
python中format()函数的简单使用教程
2018/03/14 Python
Python编写一个优美的下载器
2018/04/15 Python
python使用代理ip访问网站的实例
2018/05/07 Python
关于Pycharm无法debug问题的总结
2019/01/19 Python
python通过实例讲解反射机制
2019/10/17 Python
python实现随机加减法生成器
2020/02/24 Python
YesBabyOnline美国:全球性的在线婚纱礼服工厂
2018/05/05 全球购物
Elemental Herbology官网:英国美容品牌
2019/04/27 全球购物
递归实现回文判断(如:abcdedbca就是回文,判断一个面试者对递归理解的简单程序)
2013/04/28 面试题
静态变量和实例变量的区别
2015/07/07 面试题
安全生产汇报材料
2014/02/17 职场文书
人事专员工作职责
2014/02/22 职场文书
食品安全工作方案
2014/05/07 职场文书
幼儿园园长新年寄语2015
2014/12/08 职场文书
餐厅保洁员岗位职责
2015/04/10 职场文书
2015年语文教师工作总结
2015/05/25 职场文书
辞职申请书范本
2019/05/20 职场文书
2019新员工试用期转正工作总结范文
2019/08/21 职场文书
python 三边测量定位的实现代码
2021/04/22 Python