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

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

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() 设置日志级别内容请搜索aitechtogether.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持aitechtogether.com!

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
青葱年少的头像青葱年少普通用户
上一篇 2023年12月27日
下一篇 2023年12月27日

相关推荐

此站出售,如需请站内私信或者邮箱!