Python基础学习之logging模块

在Python编程中,日志记录(Logging)是一个非常重要的功能。它不仅可以帮助我们追踪和调试代码中的错误,还可以记录程序运行时的关键信息,以便后续分析和优化。Python标准库中的logging模块为我们提供了强大的日志记录功能。下面,我将详细介绍logging模块的基本用法和一些高级特性。

一、基本用法

1. 导入logging模块

首先,我们需要导入logging模块:

import logging

2. 配置基本日志器

默认情况下,logging模块提供了一个根日志器(root logger),但我们需要进行一些配置才能使用它。下面是一个基本的配置示例:

logging.basicConfig(level=logging.DEBUG,  format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',  handlers=[logging.StreamHandler()])
  • level:指定日志的最低级别,这里我们设置为DEBUG,表示DEBUG级别及以上的日志都会被记录。
  • format:指定日志输出的格式。这里我们使用了几个占位符:%(asctime)s表示时间戳,%(name)s表示日志器的名称,%(levelname)s表示日志级别,%(message)s表示日志消息。
  • handlers:指定日志处理器。这里我们使用了StreamHandler,它会将日志输出到控制台。

3. 记录日志

配置好日志器后,我们就可以使用它来记录日志了:

logging.debug('这是一条DEBUG级别的日志')  
logging.info('这是一条INFO级别的日志')  
logging.warning('这是一条WARNING级别的日志')  
logging.error('这是一条ERROR级别的日志')  
logging.critical('这是一条CRITICAL级别的日志')

二、高级特性

1. 自定义日志器

除了使用根日志器外,我们还可以创建自定义的日志器:

logger = logging.getLogger('my_logger')  
logger.setLevel(logging.INFO)  # 创建一个文件处理器,将日志写入文件  
file_handler = logging.FileHandler('my_log.log')  
file_handler.setLevel(logging.INFO)  # 创建一个控制台处理器,将日志输出到控制台  
console_handler = logging.StreamHandler()  
console_handler.setLevel(logging.WARNING)  # 定义日志格式  
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')  
file_handler.setFormatter(formatter)  
console_handler.setFormatter(formatter)  # 将处理器添加到日志器  
logger.addHandler(file_handler)  
logger.addHandler(console_handler)  # 记录日志  
logger.info('这是一条自定义日志器的INFO级别日志')  
logger.warning('这是一条自定义日志器的WARNING级别日志')

在这个例子中,我们创建了一个名为my_logger的自定义日志器,并将它的级别设置为INFO。然后,我们创建了一个文件处理器和一个控制台处理器,并将它们分别添加到日志器中。这样,我们就可以通过logger对象来记录日志了。

2. 日志级别

logging模块定义了五个日志级别:DEBUG、INFO、WARNING、ERROR和CRITICAL。它们的级别从低到高,表示日志的严重程度。在配置日志器时,我们可以指定一个最低级别,只有级别高于或等于这个级别的日志才会被记录。

3. 日志传播

logging模块中,日志器之间存在父子关系。当子日志器没有自己的处理器时,它会将日志传递给父日志器进行处理。这就是所谓的日志传播。通过合理配置父子关系和处理器,我们可以实现复杂的日志记录需求。

4. 日志过滤器

除了设置日志级别外,我们还可以使用过滤器来进一步控制日志的输出。过滤器可以根据日志的级别、名称或其他属性来决定是否记录该日志。通过自定义过滤器,我们可以实现更精细的日志控制。

三、实践

1. 自定义练习的python文件取名

出现以下报错:AttributeError: partially initialized module 'logging' has no attribute 'getLogger' (most likely due to a circular import)

排查是因为文件名称写成了logging.py,将其重命名为其他名称即可,因为这会与Python标准库的logging模块冲突。

2.执行结果

执行上面的代码,会在同目录下生成一个log目录,并且记录日志信息

四、总结

logging模块是Python标准库中一个非常强大的日志记录工具。通过合理配置和使用它,我们可以轻松实现复杂的日志记录需求。在开发过程中,合理使用日志记录功能可以帮助我们更好地追踪和调试代码中的错误,提高开发效率。

 

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

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

相关文章

AI日报|gpt2-chatbot神秘聊天机器人引热议,疑似GPT-4.5?《金融时报》与OpenAI达成战略合作...

欢迎大家在 GitHub 上 Star 我们: 分布式全链路因果学习系统 OpenASCE: https://github.com/Open-All-Scale-Causal-Engine/OpenASCE 大模型驱动的知识图谱 OpenSPG: https://github.com/OpenSPG/openspg 大规模图学习系统 OpenAGL: https://github.com/TuGraph-…

踏准芯片定制风口的灿芯股份,护城河足够深吗?

近年来,芯片定制渐成风潮,不仅位于下游、自身有巨大芯片需求的科技巨头如谷歌、OpenAI等纷纷转向定制,而且产业中游主打标准化芯片的主流芯片设计公司如博通、英伟达等,也相继开辟或加码定制业务。 风潮背后,一方面是…

老人摔倒监测识别摄像机

随着社会老龄化程度的不断加深,老年人的健康和安全问题日益凸显。在家中独居的老人,一旦发生意外摔倒等情况,往往难以及时得到帮助,造成了严重的安全隐患。为了解决这一问题,近年来,老人摔倒监测识别摄像机…

AI大模型探索之路-训练篇7:大语言模型Transformer库之HuggingFace介绍

系列篇章💥 AI大模型探索之路-训练篇1:大语言模型微调基础认知 AI大模型探索之路-训练篇2:大语言模型预训练基础认知 AI大模型探索之路-训练篇3:大语言模型全景解读 AI大模型探索之路-训练篇4:大语言模型训练数据集概…

鸿蒙组件样式复用简介

鸿蒙组件样式复用简介 使用Style进行复用在Component内部复用在Component外部复用使用Extend复用指定类型组件Extend支持参数传递 使用Style进行复用 在页面开发过程中,会遇到多个组件都在使用相同的样式,这时候就要考虑是不是可以将相同的样式的进行复…

【深度优先搜索 图论 树】2872. 可以被 K 整除连通块的最大数目

本文涉及知识点 深度优先搜索 图论 树 图论知识汇总 LeetCode 2872. 可以被 K 整除连通块的最大数目 给你一棵 n 个节点的无向树,节点编号为 0 到 n - 1 。给你整数 n 和一个长度为 n - 1 的二维整数数组 edges ,其中 edges[i] [ai, bi] 表示树中节点…

VMware 虚拟机打开一段时间后卡死,VNX进程CPU占比高

一、问题描述 打开虚拟机后可以正常运行 运行几分钟后突然卡死 然后通过任务管理器可以观察到VMware Workstation VMX应用进程的CPU占比高,CPU也出现异常 关闭虚拟机重新开启,还是一样卡死 二、系统环境 系统: Windows10 VMware: Workstation 17 Pro …

奇门辅助软件v2024.5

废话不说,先上链接 链接:https://pan.baidu.com/s/1_i11lMx4P_vrTs-6lpWoHA?pwd8v1m 提取码:8v1m 功能介绍 【宫内信息】是点击宫内某属性时显示的宫内基本信息。 【古籍宝鉴】是《御定奇门宝鉴》里的对应时局内容,但差补法置…

GPT:利用LLM Studio在本地运行语言模型

请关注微信公众号:拾荒的小海螺 博客地址:http://lsk-ww.cn/ 1、简述 随着人工智能和自然语言处理技术的发展,语言模型技术正逐渐成为博客和内容创作领域的重要工具。LLM Studio是一种允许用户在本地环境中运行语言模型的工具,它…

备考2024年小学生古诗文大会:吃透10道历年真题和知识点(持续)

对上海小学生的小升初和各种评优争章来说,语文、数学、英语的含金量较高的证书还是很有价值和帮助的。对于语文类的竞赛,小学生古诗文大会和汉字小达人通常是必不可少的,因为这两个针对性强,而且具有很强的上海本地特色。 今天我…

C语言 | Leetcode C语言题解之第69题x的平方根

题目&#xff1a; 题解&#xff1a; int mySqrt(int x) {long int i 0;for(i0;;i){long int a i*i;long int b (i1)*(i1);if(a < x&&b > x){break;}}return i; }

【第三版 系统集成项目管理工程师】第2章 信息技术发展(知识总结)

持续更新。。。。。。。。。。。。。。。 【第2章】 信息技术发展 考情分析2. 1信息技术及其发展2.1.1 计算机软硬件-P501.计算机硬件2.计算机软件-P51 2.1.2计算机网络1.通信基础-P522.网络基础-P534.网络标准协议-P543.网络设备-P535.软件定义网络-P576.第五代移动通信技术-P…

【C++题解】1434. 数池塘(四方向)

问题&#xff1a;1434. 数池塘&#xff08;四方向&#xff09; 类型&#xff1a;深搜 题目描述&#xff1a; 农夫约翰的农场可以表示成 NM个方格组成的矩形。由于近日的降雨&#xff0c;在约翰农场上的不同地方形成了池塘。每一个方格或者有积水&#xff08;W&#xff09;或者…

项目管理-项目沟通管理

项目管理&#xff1a;每天进步一点点~ 活到老&#xff0c;学到老 ヾ(◍∇◍)&#xff89;&#xff9e; 何时学习都不晚&#xff0c;加油 1.项目沟通管理-主要内容 项目沟通管理过程--重点&#xff1a; ①ITTO 输入&#xff0c;输出工具和技术。 ②问题和解决方案。 ③论文…

手机异地组网方案?

现代社会&#xff0c;随着信息技术的快速发展&#xff0c;人们之间的通信需求也日益增加。尤其是在异地工作、异地学习、异地旅游等情况下&#xff0c;我们需要实现不同地区间的快速组建局域网&#xff0c;以解决电脑与电脑、设备与设备、电脑与设备之间的信息远程通信问题。本…

【Linux】基于 Jenkins+shell 实现更新服务所需文件 -->两种方式:ssh/Ansible

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; &#x1f40b; 希望大家多多支…

MySQL——Windows平台下MySQL安装与配置(一)MySQL安装

Windows平台下安装和配置 基于Windows平台的MySQL安装文件有两个版本&#xff0c;一种是以.msi作为后缀名的二进制分发版&#xff0c;一种是以.zip作为后缀的压缩文件。其中.msi的安装文件提供了图形化的安装向导&#xff0c;按照向导提示进行操作即可安装完成&#xff0c;.zip…

力扣:64. 最小路径和

64. 最小路径和 给定一个包含非负整数的 m x n 网格 grid &#xff0c;请找出一条从左上角到右下角的路径&#xff0c;使得路径上的数字总和为最小。 说明&#xff1a;每次只能向下或者向右移动一步。 示例 1&#xff1a; 输入&#xff1a;grid [[1,3,1],[1,5,1],[4,2,1]] 输…

【C语言】解决不同场景字符串问题:巧妙运用字符串函数

&#x1f308;个人主页&#xff1a;是店小二呀 &#x1f308;C语言笔记专栏&#xff1a;C语言笔记 &#x1f308;C笔记专栏&#xff1a; C笔记 &#x1f308;喜欢的诗句:无人扶我青云志 我自踏雪至山巅 文章目录 一、字符函数1.1 字符分类函数1.1.1 islower1.1.2 isupper 1.…

哪个品牌的骨传导耳机好用?精选五大高性能热门骨传导耳机款式推荐!

我作为一名热衷于音乐的数码博主&#xff0c;在选购产品前也习惯于先浏览各种榜单。最近&#xff0c;我发现关于骨传导耳机的讨论热度极高&#xff0c;有人认为骨传导耳机是非常值得入手的新型蓝牙耳机&#xff0c;也有人认为骨传导耳机只是智商税的产品。经过深入调查后&#…