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 logging

logging.basicConfig()

logger_root = logging.getLogger()
logger_a = logging.getLogger("a")
logger_b = logging.getLogger("b")

logger_root.warning("1111")
logger_a.warning("2222")

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

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

import logging

logging.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 + b
    logger_code.info(f"计算结果:{c=}")

    return c


def test_add():
    a = 1

    for b in range(5):
        logger_test.info(f"收到的参数为:{a=},{b=}")
        c = add(a, b)
        _c = a + b
        logger_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.config

config = {}

logging.config.dictConfig(config)

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

在这里插入图片描述

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《安富莱嵌入式周报》第334期:开源SEM扫描电子显微镜,自制编辑器并搭建嵌入式环境,免费产品设计审查服务,实用电子技术入门,USB资料汇总,UDS统一诊断

周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 视频版: https://www.bilibili.com/video/BV1om411Z714/ 《安富莱嵌入式周报》第334期:开源SEM…

如何注册Devin-首个全自主AI软件工程师

最近devin大火,具体的就不说了,大家应该都知道,写代码非常nb,这里说一下devin的注册方式,目前devin的内测已经开启。 官网https://www.cognition-labs.com/blog注册网址Your reliable AI software engineerhttps://pr…

55. 跳跃游戏(力扣LeetCode)

文章目录 55. 跳跃游戏贪心每一次都更新最大的步数 取最大跳跃步数(取最大覆盖范围) 55. 跳跃游戏 给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后…

【数理统计实验(三)】假设检验的R实现

🍉CSDN小墨&晓末:https://blog.csdn.net/jd1813346972 个人介绍: 研一|统计学|干货分享          擅长Python、Matlab、R等主流编程软件          累计十余项国家级比赛奖项,参与研究经费10w、40w级横向 文…

python基于flask考研学习交流系统30vy7附源码django

考研在线学习与交流平台根据实际情况分为前后台两部分,前台部分主要是让用户使用的,包括用户的注册登录,首页,课程信息,在线讨论,系统公告,后台管理,个人中心等功能;后台…

OpenCV filter2D函数详解

OpenCV filter2D函数简介 OpenCV filter2D将图像与内核进行卷积,将任意线性滤波器应用于图像。支持就地操作。当孔径部分位于图像之外时,该函数根据指定的边界模式插值异常像素值。 该函数实际上计算相关性,而不是卷积: filter…

python爬虫(9)之requests模块

1、获取动态加载的数据 1、在开发者工具中查看动态数据 找到csdn的门户的开发者工具后到这一页面。 2、加载代码 import requests headers {User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36…

数据仓库为什么要分层建设?每一层的作用是什么?

在数字化时代,数据已成为企业最宝贵的资产之一。为了更好地管理和利用这些数据,许多企业都建立了数据仓库。然而,数据仓库并非简单的数据存储工具,而是一个复杂的数据处理和分析系统。其中,分层建设是数据仓库设计的重…

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

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

如何在 Azure 上备份 windows 虚拟机并恢复

起因 Azure 在 windows 虚拟机备份/还原上和通常的虚拟机备份有所区别,一般的虚拟机备份在控制台的上的操作通常是选择将目标虚拟机备份成镜像,还原的时候选择备份好的镜像即可。 但是对于 windows 虚拟机的备份/还原需要借助其磁盘进行操作。下面是操…

MySQL学习Day32——数据库备份与恢复

在任何数据库环境中,总会有不确定的意外情况发生,比如例外的停电、计算机系统中的各种软硬件故障、人为破坏、管理员误操作等是不可避免的,这些情况可能会导致数据的丢失、 服务器瘫痪等严重的后果。存在多个服务器时,会出现主从服…

【CSP试题回顾】201803-1-跳一跳

CSP-201803-1-跳一跳 解题代码 #include <iostream> using namespace std;int score, s, last_s -1;int main() {while (true){cin >> s;if (s 0) break;else if (s 1) {score s;last_s s;}else if (s 2) {if (last_s>2){score last_s;last_s 2;}else…

Controller Spawner couldn‘t find the expected controller_manager ROS interface.

rosservice list | grep controller_manager 如果没有输出&#xff0c;说明controllermanager没启动 具体通过以下启动&#xff1a; <gazebo> <plugin name"ros_control" filename"libgazebo_ros_control.so"> <!-- robotNamespace>…

Vue:内置组件:KeepAlive(缓存组件实例)

一、作用 <KeepAlive></KeepAlive>能缓存包裹的所有组件&#xff0c;保证组件在切换时维持组件状态。 默认情况下&#xff0c;一个组件实例在被替换掉后会被销毁。这会导致它丢失其中所有已变化的状态——当这个组件再一次被显示时&#xff0c;会创建一个只带有初…

深入学习React开发:从基础到实战

&#x1f482; 个人网站:【 海拥】【神级代码资源网站】【办公神器】&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交流的小伙伴&#xff0c;请点击【全栈技术交流群】 引言 React是一款流行的JavaScript库&#xf…

EMC测试整改:优化电磁兼容性,提升产品质量?|深圳比创达电子EMC

在电子设备领域&#xff0c;电磁兼容性&#xff08;Electromagnetic Compatibility&#xff0c;简称EMC&#xff09;测试是确保产品在电磁环境下能够正常工作而不对周围环境和其他设备造成干扰的关键步骤。然而&#xff0c;即使通过了初步的EMC测试&#xff0c;仍然可能存在一些…

基于uniapp的新闻文章视频资讯系统 微信小程序

基于Android的视频资讯APP组织结构如下&#xff1a; 第一章系统概述&#xff0c;首先简单的阐述基于Android的视频资讯APP背景&#xff0c;分析基于Android的视频资讯APP的意义&#xff0c;说明基于Android的视频资讯APP的研究内容。 第二章技术介绍&#xff0c;介绍基于Androi…

4.MAC平台Python的下载、安装(含Python2.7+Python3.12双版本环境变量配置)——《跟老吕学Python编程》

4.MAC平台Python的下载、安装&#xff08;含Python2.7Python3.12双版本环境变量配置&#xff09;——《跟老吕学Python编程》&#xff09;——跟老吕学Python编程 一、下载MAC版Python1.Python官网2.MAC版Python下载网址 二、在MAC安装Python1.在MAC安装Python2.阅读Python重要…

每日学习笔记:C++ STL 的forward_list

定义 特点 操作函数 元素查找、移除或安插 forward_list::emplace_after arg...指的是元素构造函数的参数&#xff08;0~N个&#xff09; #include <iostream> #include <memory> #include <list> #include <forward_list> using namespace std;class…

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

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