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中的数据存储模块shelve的用法
Mar 03 Python
Python pass详细介绍及实例代码
Nov 24 Python
Python命令行解析模块详解
Feb 01 Python
PyQt5每天必学之滑块控件QSlider
Apr 20 Python
Python随机函数random()使用方法小结
Apr 29 Python
python 字典中文key处理,读取,比较方法
Jul 06 Python
PyCharm鼠标右键不显示Run unittest的解决方法
Nov 30 Python
详解Python3 对象组合zip()和回退方式*zip
May 15 Python
原生python实现knn分类算法
Oct 24 Python
Python+Kepler.gl实现时间轮播地图过程解析
Jul 20 Python
python 如何将office文件转换为PDF
Sep 22 Python
实例讲解Python中sys.argv[]的用法
Jun 03 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中使用XML
2006/10/09 PHP
php类中private属性继承问题分析
2012/11/01 PHP
php读取本地文件常用函数(fopen与file_get_contents)
2013/09/09 PHP
PHP中把stdClass Object转array的几个方法
2014/05/08 PHP
PHP和C#可共用的可逆加密算法详解
2015/10/26 PHP
学习php设计模式 php实现桥梁模式(bridge)
2015/12/07 PHP
提交表单后 PHP获取提交内容的实现方法
2016/05/25 PHP
PHP实现添加购物车功能
2017/03/06 PHP
ThinkPHP框架使用redirect实现页面重定向的方法实例分析
2018/04/12 PHP
自己的js工具_Form 封装
2009/08/21 Javascript
深入学习jQuery Validate表单验证(二)
2016/01/18 Javascript
Node.js Streams文件读写操作详解
2016/07/04 Javascript
JS实现页面跳转参数不丢失的方法
2016/11/28 Javascript
JavaScript 栈的详解及实例代码
2017/01/22 Javascript
Nodejs 发送Post请求功能(发短信验证码例子)
2017/02/09 NodeJs
从零开始学习Node.js系列教程之SQLite3和MongoDB用法分析
2017/04/13 Javascript
layui弹出层效果实现代码
2017/05/19 Javascript
javascript如何用递归写一个简单的树形结构示例
2017/09/06 Javascript
微信小程序下拉刷新界面的实现
2017/09/28 Javascript
vue项目关闭eslint校验
2018/03/21 Javascript
js中el表达式的使用和非空判断方法
2018/03/28 Javascript
微信小程序仿微信运动步数排行(交互)
2018/07/13 Javascript
python实现域名系统(DNS)正向查询的方法
2016/04/19 Python
python中判断文件编码的chardet(实例讲解)
2017/12/21 Python
django如何连接已存在数据的数据库
2018/08/14 Python
pytorch torch.expand和torch.repeat的区别详解
2019/11/05 Python
Django认证系统user对象实现过程解析
2020/03/02 Python
python 基于opencv操作摄像头
2020/12/24 Python
留学自荐信
2013/10/10 职场文书
安全资料员岗位职责
2013/12/14 职场文书
大学生村官考核材料
2014/05/23 职场文书
暖通工程师岗位职责
2014/06/12 职场文书
求职自我推荐信
2014/06/25 职场文书
留学推荐信怎么写
2015/03/26 职场文书
Python内置数据类型中的集合详解
2022/03/18 Python
Go gorilla/sessions库安装使用
2022/08/14 Golang