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类里的__init__方法函数,Python类的构造函数
Dec 10 Python
Python urls.py的三种配置写法实例详解
Apr 28 Python
Python装饰器(decorator)定义与用法详解
Feb 09 Python
python tensorflow学习之识别单张图片的实现的示例
Feb 09 Python
Python守护进程实现过程详解
Feb 10 Python
python实现门限回归方式
Feb 29 Python
基于Python 的语音重采样函数解析
Jul 06 Python
详解Pandas 处理缺失值指令大全
Jul 30 Python
sqlalchemy实现时间列自动更新教程
Sep 02 Python
用 python 进行微信好友信息分析
Nov 28 Python
手残删除python之后的补救方法
Jun 26 Python
Python内置数据类型中的集合详解
Mar 18 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函数)
2006/10/09 PHP
php学习之流程控制实现代码
2011/06/09 PHP
php中判断文件空目录是否有读写权限的函数代码
2012/08/07 PHP
浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)(日常整理)
2015/10/26 PHP
Laravel使用Caching缓存数据减轻数据库查询压力的方法
2016/03/15 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
2017/09/22 PHP
PHP中用Trait封装单例模式的实现
2019/12/18 PHP
编写可维护面向对象的JavaScript代码[翻译]
2011/02/12 Javascript
Prototype源码浅析 String部分(一)之有关indexOf优化
2012/01/15 Javascript
实用的JS正则表达式(手机号码/IP正则/邮编正则/电话等)
2013/01/11 Javascript
js实现上传图片之上传前预览图片
2013/03/25 Javascript
关于jQuery新的事件绑定机制on()的使用技巧
2013/04/26 Javascript
JavaScript 封装一个tab效果源码分享
2015/09/15 Javascript
JavaScript文档碎片操作实例分析
2015/12/12 Javascript
利用React-router+Webpack快速构建react程序
2016/10/27 Javascript
AngularJS基于ngInfiniteScroll实现下拉滚动加载的方法
2016/12/14 Javascript
Vue + Webpack + Vue-loader学习教程之功能介绍篇
2017/03/14 Javascript
bootstrap table实现单击单元格可编辑功能
2017/03/28 Javascript
微信小程序删除处理详解
2017/08/16 Javascript
Vue.js实现价格计算器功能
2020/03/30 Javascript
axios拦截设置和错误处理方法
2018/03/05 Javascript
详解vue的数据劫持以及操作数组的坑
2019/04/18 Javascript
如何获取vue单文件自身源码路径
2019/05/06 Javascript
详解使用JWT实现单点登录(完全跨域方案)
2019/08/02 Javascript
vue项目打包后提交到git上为什么没有dist这个文件的解决方法
2020/09/16 Javascript
jQuery+ajax实现文件上传功能
2020/12/22 jQuery
二种python发送邮件实例讲解(python发邮件附件可以使用email模块实现)
2013/12/03 Python
Python用Pillow(PIL)进行简单的图像操作方法
2017/07/07 Python
python2.7安装图文教程
2018/03/13 Python
浅谈tensorflow中几个随机函数的用法
2018/07/27 Python
用Python实现筛选文件脚本的方法
2018/10/27 Python
python+excel接口自动化获取token并作为请求参数进行传参操作
2020/11/10 Python
推荐10个CSS3 制作的创意下拉菜单效果
2014/02/11 HTML / CSS
财务会计毕业生自荐信
2013/11/02 职场文书
廉洁自律个人总结
2015/02/14 职场文书
村级干部党员公开承诺事项
2015/05/04 职场文书