python学习2:日志记录的用法

一些日志记录的简单记录:
在这里插入图片描述
basicConfig可以进行配置
注意日志的等级:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上述代码得到的日志如下(最基础的日志):
在这里插入图片描述
关于记录下来的日志格式可以有很多内容:如等级、发生的时间、发生的位置、发生的进程、发生的线程、发生的调用栈等,当日志进行格式化时,可以支持占位符
示例:
在这里插入图片描述

日志处理方式:

默认情况下:输出到标准错误stderr中,为了和print使用的标准输出stdout区分开来,pycharm会将日志显示为红色。
如果现在需要:
1.输出到指定的流,比如stdout中,则通过stream参数指定输出目标
在这里插入图片描述

2.输出到指定的文件,通过filename filemode encoding errors参数指定文件的打开方式

filemode默认值是a 即append 附加,errors默认值是加斜杠转义
注意,不能和输出到流共同使用
在这里插入图片描述

日志记录流程

在这里插入图片描述
先去检查日志的等级,达到等级才去创建日志记录对象,判断日志是否会被拒绝被过滤,不被拒绝(记录),再交给日志的处理器,处理器再次判断等级(是否达到处理等级),判断是否会被过滤,ok再进行处理(格式化),回到主流程判断是否要交给父处理器再进行循环

  • 日志记录器
    1 提供方法,供程序创建日志
    2 通过等级、过滤器来筛选要处理的日志
    3 把要处理的日志交给日志处理器进行处理
    默认是root记录器,就是在上述第一次运行日志脚本时看到的root
    虽然有默认的,但是我们会创建自己的日志记录器,让不同的日志记录器有自己的执行模式
import logginglogging.basicConfig()logger_root = logging.getLogger()
logger_a = logging.getLogger("a")
logger_b = logging.getLogger("b")logger_root.warning("1111")
logger_a.warning("2222")

得到的结果:
在这里插入图片描述

如果在项目中,用不同的记录器就可以记录更加清晰的内容
代码示例:

import logginglogging.basicConfig(level=logging.INFO, filename="test.log", filemode="w", encoding="utf-8"
)
logger_code = logging.getLogger("code")  # 业务代码
logger_test = logging.getLogger("test")  # 测试代码def add(a, b):logger_code.info(f"收到参数:{a=}, {b=}")c = a + blogger_code.info(f"计算结果:{c=}")return cdef test_add():a = 1for b in range(5):logger_test.info(f"收到的参数为:{a=},{b=}")c = add(a, b)_c = a + blogger_test.info(f"预期结果为:{_c=}, 实际结果为:{c=}")if c == _c:logger_test.warning("测试通过")else:logger_test.warning("测试失败")if __name__ == "__main__":test_add()

结果为:
在这里插入图片描述

这样就方便后期再次操作,如在命令行中打开,通过grep进行筛选
通过

当然也可以在配置中就进行筛选,可以配置logger
常用的配置选项:等级、过滤器、处理方法
logger_test.setLevel(logging.DEBUG)

当在多个模块中使用logging时要注意,当记录器前缀相同时有父记录器子记录器的关系,子处理器的等级会和父记录器保持一致

注意python中可以通过

logging.getLogger(__name__)#为本模块创建记录器

而且即便在不同的文件中,get同一个名字的logger,得到的就是同一个logger
getLogger首先尝试获取,如果不存在就会创建,如果存在则直接返回

  • 日志处理器(有等级判断)
    在这里插入图片描述
    可以选择将日志内容发送(保存)到指定地方,比如输出到TCP,输出到多个文件中等,只需要通过logger.addHandler(……)添加处理器,将创建好的处理器添加给指定“记录器”,或者在basicConfig中配置

处理器也是设置等级,通过处理器的差异化设置,使得不同级别的日志会按照不同的方式进行处理
logger.addHandler(……)添加处理器
在这里插入图片描述

日志格式的配置

formatter = logging.Formatter(),将设置好的格式给处理器hander.setFormatter(formatter),因为记得我们最开始的流程图,是处理器在最后才会用到格式化。注意,一个处理器只能有一个格式。

集中式配置

基于代码的配置可维护性可读性都不够好,我们用基于文件的配置,将配置信息和代码进行分离。
logging模块支持基于文件的配置,如ini格式,也支持基于字典的模式,字典数据可以保存为各种文件格式,如json、yaml、csv、mysql

import logging.configconfig = {}logging.config.dictConfig(config)

在这里插入图片描述
写好config文件之后,可以通过import json来对config进行json文件的转换
在这里插入图片描述
字典转换成yaml也是同理,记得先pip install pyyamyaml.safe_dump(config, f);

在这里插入图片描述

json转换为字典:loads
在这里插入图片描述

yaml转为字典:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/743619.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WinRAR功能之【加密文件名】

很多人知道,WinRAR解压缩软件可以给压缩包设置密码,这样就可以保护压缩包里的文件,不被随意打开。 设置密码后,双击压缩包还是可以打开的,但要打开里面的文件时,就需要输入原本设置的密码才能打开。 虽然…

蓝桥杯-Python组(一)

1. 冒泡排序 算法步骤: 比较相邻元素,如果第一个大于第二个则交换从左往右遍历一遍,重复第一步,可以保证最大的元素在最后面重复上述操作,可以得到第二大、第三大、… n int(input()) a list(map(int, input()…

三、NLP中的句子关系判断

句子关系判断是指判断句子是否相似,是否包含,是否是问答关系等,常应用在文本去重、检索(用户输入和文档的相关性)、推荐(和用户喜好文章是否相似)等场景中。 3.0、文本相似度计算 3.0.0 传统机…

计算机网络-认识设备

一、概述 前面我们其实已经讲了一些关于设备的知识了,从现在开始进入下一阶段的理解。 网络基础设施由交换机、路由器、防火墙等构成,那我们的数据怎样从一个接口转发到另外一个接口最终实现网络访问的呢? 二、设备基础 2.1 网络设备硬件架构 我们分别以…

Axure原型设计项目效果 全国职业院校技能大赛物联网应用开发赛项项目原型设计题目

目录 前言 一、2022年任务书3效果图 二、2022年任务书5效果图 三、2022年国赛正式赛卷 四、2023年国赛第一套样题 五、2023年国赛第二套样题 六、2023年国赛第三套样题 七、2023年国赛第四套样题 八、2023年国赛第七套样题 九、2023年国赛正式赛题(第八套…

SSA-LSTM多输入回归预测 | 樽海鞘优化算法-长短期神经网络 | Matlab

目录 一、程序及算法内容介绍: 基本内容: 亮点与优势: 二、实际运行效果: 三、算法介绍: 四、完整程序下载: 一、程序及算法内容介绍: 基本内容: 本代码基于Matlab平台编译&am…

智慧路灯杆如何提升智慧城市文旅形象

今年以来,全国多地城市凭借本地独特物产、独特旅游环境等亮点火爆出圈,为城市带来显著经济增长和形象提升。文旅经济作为高附加值产业,具有高收益、高潜力等特点,还有助于推动城市经济转型和可持续发展。 推动城市文旅经济发展&am…

力扣每日一题 最大二进制奇数 模拟 贪心

Problem: 2864. 最大二进制奇数 由于奇数的二进制末尾一定是 111,我们可以把一个 111 放在末尾,其余的 111 全部放在开头,这样构造出的奇数尽量大。 复杂度 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( 1 ) O(1) O(1) Code class…

全国降雨侵蚀力因子R值/土壤侵蚀模型RUSLE

降雨侵蚀力因子其实是反应降雨对土壤侵蚀的潜在能力,就是降雨的冲刷对土壤的侵蚀效应。 在过去几天查阅文献资料的过程中,本人亲眼看见过的关于因子R的计算方法就超过30种,着实大开了眼界。 不过总结这些计算方法,其实核心思路大…

第六篇【传奇开心果系列】Python的自动化办公库技术点案例示例:大学生数据全方位分析挖掘经典案例

传奇开心果博文系列 系列博文目录Python的自动化办公库技术点案例示例系列 博文目录前言一、Pandas库全方位分析挖掘大学生数据能力介绍二、大学生学生成绩数据分析数据挖掘示例代码三、大学生选课数据分析数据挖掘示例代码四、大学生活动参与数据分析数据挖掘示例代码五、大学…

让若依生成的service、mapper继承mybatisPlus的基类

前言:若依继承mybatisPlus后,生成代码都要手动去service、serviceImpl、mapper文件去继承mybatisplus的基类,繁琐死了。这里通过修改若依生成模版从而达到生成文件后直接使用mybatisPlus的方法。 一、首先找到若依生成模版文件位置&#xff…

VsCode免密登录

创建本地密匙 按下WinR输入cmd,输入 ssh-keygen -t rsa然后连续回车直到结束 找到Your public key has been saved in C:\Users\Administrator/.ssh/id_rsa.pub,每个人都不一样找到密匙所在地 打开id_rsa.pub这个文件,可以用记事本打开&am…

ROS 语音交互(三) tts

目录 一、模型选择 二、流程 三、核心代码展示 一、模型选择 科大讯飞超拟人识别 二、流程 超拟⼈合成协议 | 讯飞开放平台文档中心 (xfyun.cn) 三、核心代码展示 # coding: utf-8 import _thread as thread import os import time import base64import base64 import …

【C++】STL--String

这一节主要总结string类的常见接口,以及完成了string类的模拟实现。 目录 标准库的String类 string类常见接口 string类对象的常见构造 string析构函数:~string string类对象的容量操作 string类对象的访问及遍历操作 string类对象的修改操作 s…

NAS网络存储的简单了解

一、概述 NAS网络存储,即网络附加存储(Network Attached Storage),是一种具有很大存储容量的电脑外敷设备,它通过网络直接连接到交换机上。NAS的主要功能是为网络区域存储(或磁盘)的用户提供数据…

二、TensorFlow结构分析(5)案例

案例: minimize(error) 代码: def linear_regression():# 自实现线性回归# 1)准备数据X tf.random.normal(shape[100,1])y_true tf.matmul(X,[[0.8]]) 0.7# 2)构造模型# 定义模型参数 用 变量weights tf.Variable(initial_v…

聚观早报 | 比亚迪e2荣耀版上市;华为享界S9正式亮相

聚观早报每日整理最值得关注的行业重点事件,帮助大家及时了解最新行业动态,每日读报,就读聚观365资讯简报。 整理丨Cutie 3月14日消息 比亚迪e2荣耀版上市 华为享界S9正式亮相 理想汽车L系列改名 极氪全新纯电MPV车型曝光 vivo X100S外…

大数据基础设施搭建 - Doris

文章目录 一、Linux系统要求1.1 设置系统最大打开文件句柄数1.2 设置最大虚拟块的大小1.3 集群中其他安装doris的机器同上调整1.4 重启服务器生效 二、确认需要下载哪个Doris版本三、上传并解压压缩包3.1 创建目录3.2 解压fe3.3 解压be3.4 解压java udf函数3.4.1 解压3.4.2 复制…

金航标kinghelm宋仕强先生说,“金航标,连接世界

金航标kinghelm宋仕强先生说,“金航标,连接世界”。连接器的作用是为两个电路子系统提供一个可分离的界面,一方面使得零部件或子系统的维护或升级不必修改整个系统;另一方面提高了零部件的便携性、外围设备的拓展能力,…

搭建个人智能家居 3 -第一个设备“点灯”

搭建个人智能家居 3 -第一个外设“点灯” 前言ESPHome点灯 HomeAssistant 前言 前面我们已经完成了搭建这个智能家居所需要的环境HomeAssistant和ESPHome,今天我们开始在这个智能家居中添加我们的第一个设备(一颗LED灯),如果环境…