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进行复用 在页面开发过程中,会遇到多个组件都在使用相同的样式,这时候就要考虑是不是可以将相同的样式的进行复…

vue 使用 html2canvas 截屏并下载图片至本地(重点兼容ie浏览器)

安装html2canvas&#xff1a; npm install --save html2canvas注意&#xff1a;如果是某些原因不能npm的话就直接把依赖包拷贝到node_modules就可以啦 html&#xff1a; <div class"details-box" v-show"detailsFormShow"><div class"det…

群狼调研(长沙市场调研)|食品安全群众满意度调查方案

本文由群狼调研&#xff08;长沙食品安全满意度调查&#xff09;出品&#xff0c;欢迎转载&#xff0c;请注明出处。设计一个食品安全群众满意度调查方案需要考虑调查目的、样本选择、问题设计、数据收集和分析等多个方面。以下是一个可能的食品安全群众满意度调查方案的概述&a…

AP510X 单路低压差线性恒流芯片 LED手电筒景观亮化台灯车灯照明

AP510X 是一系列电路简洁的单路线性LED恒流芯片&#xff0c;适用于3-60V电压范围的LED恒流调光领域。AP510X采用我司算法&#xff0c;可以实现高精度的恒流效果&#xff0c;输出电流恒流精度≤3&#xff05;&#xff0c;电源供电工作范围为3-40V&#xff0c;可以轻松满足锂电池…

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

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

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

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

奇门辅助软件v2024.5

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

[Flutter]单元测试和组件测试

1.单元测试 在Flutter开发中&#xff0c;进行单元测试是确保你的代码质量以及未来更改不会破坏现有功能的关键步骤。当你开发私有包时&#xff0c;单元测试尤其重要&#xff0c;因为这有助于保持包的稳定性和可维护性。以下是如何在Flutter中进行单元测试的详细指南&#xff1…

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

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

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

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

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; }

Redis 整合

1、pom 引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency>2、yml 配置 spring:redis:host: 192.168.56.10port: 63793、直接注入 StringRedisT…

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

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

input,el-input输入框正则验证输入的非数字转为空

<input οninput"this.valuethis.value.replace(/\D/g,)" maxlength"4" v-model"code" placeholder"请输入验证码" /> <el-input v-model"unboundTel" placeholder"请输入解绑手机号" clearable blur&q…

选择CDN加速器节点网络的因素有哪些?

CDN加速能够将网站的静态资源缓存分布在全球的各地的服务器节点上&#xff0c;当用户进行访问网站时&#xff0c;能够提供一定的资源&#xff0c;以此来减少网络延迟和加载时间&#xff0c;提高网站整体的访问速度。 那么我们在选择CDN 加速器节点网络时应该考虑哪些因素呢&…

霍尼韦尔HONEYWELL 17HM5 微型密封基本开关

微动开关与普通开关的主要区别在于它们的设计和操作特性。以下是微动开关的特点&#xff1a; 微小接点间隔&#xff1a;微动开关的触点间距较小&#xff0c;这使得它们能够提供的开关动作。 快动机构&#xff1a;它们具有快速动作的特性&#xff0c;能够在短的行程内完成接通…