Python 中如何使用 setLevel() 设置日志级别

 更新时间:2023年07月10日 09:58:10   作者:迹忆客  
这篇文章主要介绍了在 Python 中使用setLevel() 设置日志级别,Python 提供了一个单独的日志记录模块作为其标准库的一部分,以简化日志记录,本文将讨论日志记录 setLevel 及其在 Python 中的工作方式,需要的朋友可以参考下

日志记录是任何程序员生活中非常有效的工具。 它不仅可以让我们更好地理解程序的流程,还可以让我们了解程序执行过程中可能出现的错误。

Python 提供了一个单独的日志记录模块作为其标准库的一部分,以简化日志记录。 本文将讨论日志记录 setLevel 及其在 Python 中的工作方式。

Python登录程序的功能

日志记录是在软件运行时跟踪程序流程的过程。 但是,如果您没有实现登录到您的程序中,那么每当程序崩溃时,就很难找到发生问题的根源。

通过在程序中实现日志记录,您可以轻松找到问题的根源并立即解决。 它在调试和开发软件时非常有用。

有时,人们使用打印语句来查找软件中的问题。 打印可以解决简单脚本的问题,但对于更大、更复杂的软件来说,它们不是一个好的选择。

Python 在其标准库中提供了一个称为日志记录的内置模块,该模块将状态消息写入任何输出流或文件,以说明程序的哪一部分正在运行以及导致了什么问题。

Python 中的日志消息级别

Python 中的日志记录模块根据其重要性具有不同的状态/日志消息级别。 因此,日志消息的级别告诉您该日志消息的重要性。

日志消息的不同级别如下:DEBUG、INFO、WARNING、ERROR 和 CRITICAL,其中 CRITICAL 的重要性最高。

日志级别说明
DEBUG它用于在软件中进行调试。 通常会在出现问题时提供详细信息。
INFO它确保程序中的一切正常。
WARNING用来表示将来可能会出现一些问题,应该予以解决以避免将来出现问题。
ERROR用于表示软件由于严重问题而无法执行特定功能。
CRITICAL此级别表示导致软件停止的严重问题。

所有这些级别都是为处理程序或记录器设置的,以便在发生错误时可以在适当的时间显示适当的消息。 日志记录级别在上面根据它们的重要性进行了解释,第一个是最不重要的,最后一个(CRITICAL 级别)是最重要的。

使用 Python 日志记录模块中的 setLevel() 函数设置日志记录级别

setLevel(level) 函数用于将记录器的阈值设置为指定级别。 低于指定级别的日志记录消息将被忽略,而具有更高严重性的消息将由为记录器提供服务的相应处理程序发出。

Python 中的日志记录有一个有效级别的概念。 最初,当创建记录器时,它被设置为 NOTSET 级别。

但是,此 NOTSET 不是有效级别。 有效级别是在 setLevel(level) 的帮助下明确设置的级别。

创建记录器时,如果未显式设置其级别,则检查其父记录器的级别以获得记录器的有效级别,该级别将使用 setLevel(level) 显式设置。 如果父记录器也未设置为有效级别,则检查其父记录器。

该过程将继续,直到找到 NOTSET 以外的级别或到达根。 根记录器设置为默认级别警告; 因此,在这种情况下,root 的默认级别将被视为有效级别。

现在,让我们通过一些代码示例了解 setLevel(level) 的用法。

import logging
logging.debug('Debug message')
logging.info('Info message')
logging.warning('Warning message')
logging.error('Error message')
logging.critical('Critical message')

输出:

WARNING:root:Warning message
ERROR:root:Error message
CRITICAL:root:Critical message

如上面的输出所示,只打印了 WARNING、ERROR 和 CRITICAL 消息,因为根记录器的默认级别 WARNING 已被视为有效级别,因为没有指定其他记录器或其父级。 因此,将打印 WARNING 及之后级别的所有消息,而忽略不那么重要的消息。

让我们看一个例子,记录器将有效级别视为父级别。

import logging
parent_logger = logging.getLogger('parent')
parent_logger.setLevel(4)
child_logger = logging.getLogger('parent.child')
print(parent_logger.getEffectiveLevel())
print(child_logger.getEffectiveLevel())

输出:

4

4

可以看到,child_logger没有设置有效级别,所以使用parent_logger的级别作为有效级别。

Python 中的日志处理程序

Python 中的处理程序是负责将适当的日志消息记录到处理程序的指定目的地的对象; 这些处理程序也像记录器一样工作。 如果记录器没有设置处理程序,则会在其祖先中搜索处理程序。

现在让我们看看处理程序在日志记录中的用法:

import logging
logger = logging.getLogger('example')
logger.setLevel(logging.INFO)
fileHandler = logging.FileHandler('p1.log')
fileHandler.setLevel(logging.INFO)
chl = logging.StreamHandler()
chl.setLevel(logging.INFO)
logger.addHandler(fileHandler)
logger.addHandler(chl)
logger.info('Information')

输出:

Information

我们在上面的代码中创建了两个处理程序:fileHandler 和 chl。 fileHandler 将记录发送到 p1.log 文件,chl 处理程序将记录发送到流。

但是,如果未指定流,则使用 sys.stderr。 最后,使用 addHandler 将处理程序添加到记录器。

现在您一定想知道为什么我们设置了两次级别:一次用于记录器,另一次用于处理程序。 您可以删除处理程序上的 setLevel(),这会将消息的所有级别过滤留给记录器。

但是,如果您为处理程序和记录器设置级别,则会出现不同的情况。 记录器首先根据级别过滤消息; 因此,如果您将记录器设置为 WARNING、INFO 或任何更高级别,并将处理程序设置为 DEBUG,您将不会收到任何 DEBUG 日志消息,因为记录器首先会忽略它。

同样,如果您将记录器设置为 DEBUG 并将处理程序设置为任何更高级别,例如 INFO,您也不会收到任何 DEBUG 消息,因为处理程序将拒绝它们。 即使记录器批准它,处理程序也会拒绝它(因为 INFO > DEBUG)。

因此,在为记录器和处理程序设置级别时应该足够小心,以确保软件正常工作。

总结

在本文中,我们讨论了日志记录 setLevel() 及其在 Python 中的工作方式。

日志记录是一种非常有效的工具,通过记录程序的流程并发现错误的可能性来管理软件或程序的代码。 对于 Python 中的日志记录,我们根据它们的重要性为不同的日志消息设置不同的级别。

所有这些级别都是使用 setLevel 设置的,本文对此进行了非常详细的解释。

到此这篇关于在 Python 中使用 setLevel() 设置日志级别的文章就介绍到这了,更多相关Python setLevel() 设置日志级别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python实现抢购IPhone手机

    Python实现抢购IPhone手机

    这篇文章主要为大家详细介绍了Python实现抢购IPhone手机,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • python如何通过pyqt5实现进度条

    python如何通过pyqt5实现进度条

    这篇文章主要介绍了python如何通过pyqt5实现进度条,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • python操作MySQL数据库的方法分享

    python操作MySQL数据库的方法分享

    坚持每天学一点,每天积累一点点,作为自己每天的业余收获,这个文章是我在吃饭的期间写的,利用自己零散的时间学了一下python操作MYSQL,所以整理一下
    2012-05-05
  • Python tkinter之Bind(绑定事件)的使用示例

    Python tkinter之Bind(绑定事件)的使用示例

    这篇文章主要介绍了Python tkinter之Bind(绑定事件)的使用详解,帮助大家更好的理解和学习python的gui开发,感兴趣的朋友可以了解下
    2021-02-02
  • python OpenCV的imread不能读取中文路径问题及解决

    python OpenCV的imread不能读取中文路径问题及解决

    这篇文章主要介绍了python OpenCV的imread不能读取中文路径问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • Python跑循环时内存泄露的解决方法

    Python跑循环时内存泄露的解决方法

    这篇文章主要介绍了Python跑循环时内存泄露的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • python编程scrapy简单代码实现搜狗图片下载器

    python编程scrapy简单代码实现搜狗图片下载器

    这篇文章主要为大家介绍了使用python scrapy简单代码实现搜狗图片下载器示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-11-11
  • Python 条件,循环语句详解

    Python 条件,循环语句详解

    这篇文章主要介绍了详解Python中的条件,循环语句,循环语句是学习各个编程语言的最基本的基础知识,需要的朋友可以参考下
    2021-09-09
  • matplotlib 3D模型绘制一朵小红花

    matplotlib 3D模型绘制一朵小红花

    这篇文章主要介绍了matplotlib 3D模型绘制一朵小红花,代码有趣也有一定的知识参考价值,需要的朋友可以参考文章内容下去试试
    2022-02-02
  • Python编程快速上手——选择性拷贝操作案例分析

    Python编程快速上手——选择性拷贝操作案例分析

    这篇文章主要介绍了Python选择性拷贝操作,结合具体实例形式分析了Python文件遍历、查找、复制拷贝等相关操作技巧,需要的朋友可以参考下
    2020-02-02

最新评论