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 传统机…

Vivado原语模板

1.原语的概念 原语是一种元件! FPGA原语是芯片制造商已经定义好的基本电路元件,是一系列组成逻辑电路的基本单元,FPGA开发者编写逻辑代码时可以调用原语进行底层构建。 2.原语的分类 原语可分为预定义原语和用户自定义原语。预定义原语为如and/or等门级原语不需要例化,可以…

【AIGC调研系列】AIGC企业级模型Command-R介绍

Command-R与其他大语言模型的主要区别在于其专为企业级应用设计,特别是在检索增强生成(RAG)和工具使用方面。Command-R是一个350亿参数的高性能生成模型,具有开放式权重,能够支持多种用例,包括推理、摘要和…

用C语言链表实现图书管理

#include <stdio.h> #include <stdlib.h> #include <string.h> struct ListNode {int val;//编号char title[50];//书名float price;//价格struct ListNode* next; };// 在尾部插入节点 struct ListNode* insertAtTail(struct ListNode* head, int val,char …

Elastic script_score的使用

script_score介绍 在Elasticsearch中&#xff0c;script_score是在function_score查询中的一种功能强大的方式&#xff0c;允许用户使用内置Painless脚本语言或者其他支持的语言来动态计算每个文档的评分 script_score语法 GET /<索引名>/_search {"query":…

一文了解什么是函数柯里化

前言 柯里化(Currying)和反柯里化(Uncurrying)在JavaScript中总感觉属于一种不温不火的存在&#xff0c;甚至有些开发者在提起柯里化和反柯里化时&#xff0c;竟然会有点生疏不懂。其实不然&#xff0c;对于它们的概念可能在日常开发中不太提到&#xff0c;但是它们的思想和用…

计算机网络-认识设备

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

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

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

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

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

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

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

Java之List.steam().sorted(Comparator.comparing())排序异常解决方案

使用steam().sorted(Comparator.comparing())对List<T>集合里的String类型字段进行倒序排序&#xff0c;发现倒序失效。记录解决方案。 异常代码如下: customerVOList customerVOList.stream().sorted(Comparator.comparing(CustomerVOVO::getCustomerRate).reversed()…

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

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

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

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

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

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

【国产MCU】-窗口看门狗(WWDG)

窗口看门狗(WWDG) 文章目录 窗口看门狗(WWDG)1、窗口看门狗介绍2、窗口看门狗驱动API介绍3、窗口看门狗使用示例CH32V307的窗口看门狗是一个7位的递减计数器,并可以设置成自由运行。可以被用于在发生问题时复位整个系统。其由主时钟驱动,具有早期预警中断功能;在调试模式…

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

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

C#命名空间基础及案例

目录 C#与C、C的区别设计和用途&#xff1a;语法和特性&#xff1a;内存管理&#xff1a;跨平台性&#xff1a; usingnamespace变量声明常量double双精度浮点数类型字符串double列表 路径相关System.IO.File.Exists&#xff08;&#xff09;Path.GetFullPath&#xff08;&#…

VsCode免密登录

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