Python基础学习之logging模块

news2024/9/25 11:22:25

在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.coloradmin.cn/o/1644605.html

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

相关文章

受控文件传输要怎么做 才能保障数据不泄露?

受控文件传输是指在严格的安全措施和政策控制下进行文件传输的过程,受控文件传输的目的是确保数据的安全性和完整性,同时满足合规性和审计要求,适用于需要高安全级别的企业环境,如金融机构、医疗机构、政府机构等。 为了实现受控文…

Rust 实战thiserror+自定义错误消息体

导航 一、背景二、实践1、导入thiserror2、自定义错误消息体(1)创建ErrMsg.rs和创建自定义结构体(2)lib.rs添加ErrMsg(3)main函数(4)完整代码 一、背景 开发中遇到需要通用、能够满…

发卡授权盗u源码系统搭建ZHU16728

2024最新UI发卡盗U/支持多语言/更新UI界面/支持多个主流钱包去除后门板,搭建系统TGaqxm01 。功能完美。 此套系统二开后完美授权成功,百分百授权。不是市面上那种授不了权的那种。 授权额度Unlimited 懂的都懂。 1.Php静态 2.目录puicta 3.扩sal 4.ss…

避雷!7.7分,新增1区TOP被标记On Hold,5本已被踢除!

本周投稿推荐 SSCI • 2/4区经管类,2.5-3.0(录用率99%) SCIE(CCF推荐) • 计算机类,2.0-3.0(最快18天录用) SCIE(CCF-C类) • IEEE旗下,1/2…

Mysql索引失效情况

索引失效的情况 这是正常查询情况,满足最左前缀,先查有先度高的索引。 1. 注意这里最后一种情况,这里和上面只查询 name 小米科技 的命中情况一样。说明索引部分丢失! 2. 这里第二条sql中的,status > 1 就是范围查…

【图书推荐】《ChatGLM3大模型本地化部署、应用开发与微调》

本书目的 本书通过多个PyTorch实战案例,帮助读者掌握ChatGLM3大模型本地化部署、应用开发与微调技能。智能问答机器人、美妆助手、上市公司财务报表信息抽取、上市公司财务报表智能问答与财务预警等案例,都可以按读者自己的业务需求,改造成可…

Ubuntu多版本(低版本)gcc/g++安装、切换与卸载图文教程

目录 1 问题背景2 多版本安装3 多版本切换4 多版本卸载5 其他问题 1 问题背景 环境: gcc 9.4.0g 9.4.0Ubuntu20.04 现象:通过apt install build-essential安装的gcc和g默认是当前版本系统支持的最高版本编译器,但是很多工程的编译需要安装低版…

大数据信用风险特别高,那大数据信用高风险要如何降低呢?

在大数据信用报告中,综合评分是直观体现信用风险高低的重要元素,也就是我们长听说的大数据信用分,很多人在查大数据信用报告之后,发现自己的大数据信用风险特别高,那大数据信用高风险要如何降低呢?小编从引起高风险的…

在线点餐系统搭建重点,会用到哪些三方服务?

在线点餐系统的搭建是一个涉及多个环节和技术的过程,其重点包括需求分析、系统设计、功能实现、用户体验以及系统的稳定性和安全性等方面。在搭建过程中,可能会使用到以下三方服务: 云服务提供商:云服务为在线点餐系统提供了基础…

充电宝怎么选?哪些充电宝的性价比比较高?性价比高充电宝推荐

在快节奏的现代生活中,共享充电宝已成为我们出行的常见伴侣。它们遍布城市的各个角落,为手机电量告急的我们提供了及时的帮助。然而,这种便利背后也隐藏着一些不那么方便的小插曲。 首先,我们得承认共享充电宝的便捷性。无论你是…

【JavaEE 初阶(二)】线程安全问题

❣博主主页: 33的博客❣ ▶️文章专栏分类:JavaEE◀️ 🚚我的代码仓库: 33的代码仓库🚚 🫵🫵🫵关注我带你了解更多线程知识 目录 1.前言2.synchronized2.1例子2.2synchronized修饰代码块2.3 synchronized修饰方法2.4sy…

多模态路径:利用其他模态的无关数据改进变压器(CVPR 2024)

<Multimodal Pathway: Improve Transformers with Irrelevant Data from Other Modalities> 论文地址&#xff1a;https://arxiv.org/abs/2401.14405 项目网页&#xff1a;https://ailab-cvc.github.io/M2PT/ 开源代码&#xff1a;https://github.com/AILab-CVC/M2PT 讲…

天锐绿盾 | 公司防泄密软件

天锐绿盾是一款专为企业设计的图纸及文件加密防泄密软件&#xff0c;旨在保护企业的核心信息资产和知识产权。这款软件提供了强大的数据保护功能&#xff0c;通过透明加密技术&#xff0c;在不影响员工正常工作流程的前提下&#xff0c;自动对指定类型的文件&#xff08;如设计…

流程:采集1688店铺内有成交的商品列表||1688商品订单列表+订单详情API接口

此API目前支持以下基本接口&#xff1a; item_get 获得1688商品详情item_search 按关键字搜索商品item_search_img 按图搜索1688商品&#xff08;拍立淘&#xff09;item_search_suggest 获得搜索词推荐item_fee 获得商品快递费用seller_info 获得店铺详情item_search_shop 获得…

【intro】图卷积神经网络(GCN)

本文为Graph Neural Networks(GNN)学习笔记-CSDN博客后续&#xff0c;内容为GCN论文阅读&#xff0c;相关博客阅读&#xff0c;kaggle上相关的数据集/文章/代码的阅读三部分&#xff0c;考虑到本人是GNN新手&#xff0c;会先从相关博客开始&#xff0c;进一步看kaggle&#xff…

618有哪些你值得入手的?你值得入手的618好物清单

在618的折扣风暴中&#xff0c;我特别想向那些计划更新家电的朋友们推荐一些优质产品。家电作为日常生活中不可或缺的一部分&#xff0c;其品质与性价比尤为重要。而618正是购买家电的绝佳时机&#xff0c;但如何避免被次品所困&#xff0c;这就需要你手握这份618好物清单&…

《MySQL数据类型》

文章目录 一、理解数据本身就是一种约束1.tinyint类型和 tinyint unsigned类型2.其他的int类型 二、bit类型三、float类型1.signed版本注意2.unsigned版本 四、decimal类型float 和 decimal 总结五、char类型&#xff08;固定长度&#xff09;六、varchar类型&#xff08;可变长…

T型槽地轨承载力是如何连接整个制造过程的强力桥梁(北重公司设计)

T型槽地轨承载力的定义和计算 T型槽地轨是一种用于工业设备运输和装配的关键组件。它由世界上各行各业的生产商广泛采用&#xff0c;其有效的承载力使其成为连接整个制造过程的强力桥梁。本文将介绍T型槽地轨的承载力以及相关的设计要点和应用。 承载力的定义和计算 承载力是…