Python 日志记录模块的综合指南
Python 日志模块的综合指南
日志记录是软件开发的一个重要方面,它允许开发人员跟踪和管理应用程序的行为。Python 提供了一个功能强大的日志模块,可提供灵活和可定制的日志功能。在本文中,我们将深入探讨 Python 日志模块,包括其用法、优点和高级功能。
是什么让 print 语句变得不伦不类?
print
语句被认为不是很 Pythonic,因为它们通常用于临时调试,会使代码变得杂乱无章。一旦你调试完代码,你就需要返回并删除所有你写的 print
语句。相反,Python 鼓励使用日志模块,它可以更好地控制消息、级别和目的地,同时有助于保持代码更整洁、更有条理。
相关阅读:Python 的 print 函数你真的会用了吗?
Python 日志级别
在 Python 的日志模块中,有多个日志级别,每个级别都有自己的意义和用例。以下是标准日志级别及其简要说明:
• DEBUG:用于诊断问题的详细信息,在开发和调试过程中使用。
• INFO:确认运行情况符合预期;关于程序执行情况的信息。
• WARNING:表示潜在的问题或不一定妨碍程序运行的问题。
• ERROR:表示更严重的问题,可能导致程序无法正常运行。
• CRITICAL:通常会导致程序终止的严重错误;最严重的日志记录级别。
开发人员可以根据需要定义其他日志记录级别,不过现有级别通常足以应对大多数情况。每个内置日志记录级别都有一个特定的数值来表示其重要性。
下面是 Python 日志模块中关键组件和方法的简化解释:
Constants:
• Constants(常量)是代表日志级别的固定值,如 DEBUG
、INFO
、WARNING
、ERROR
和 CRITICAL
。
Classes(类):
• Logger
(记录器):代表日志记录通道并负责发出日志信息的对象。
• Handler
(处理程序):定义日志信息发送位置(如控制台或文件)的类。
• Filter
(过滤器):用于指定应根据特定条件处理哪些日志记录的类。
Methods(方法):
• logger.info(msg)
:记录 INFO 级别的信息。
• logger.warning(msg)
:记录警告级别的警告信息。
• logger.error(msg)
:以 ERROR 级别记录错误信息。
• logger.critical(msg)
:以 CRITICAL 级别记录关键信息。
• logger.log(lvl, msg)
:以自定义整数日志级别 (lvl) 记录一条信息。
• logger.exception(msg)
:以 ERROR 级别记录错误信息,并包含异常信息。
• logger.setLevel(lvl)
:设置此日志记录器的最小日志级别(阈值),忽略低于该级别的消息。
• logger.addFilter(filt)
:为该日志记录器添加过滤器,允许对处理的日志记录进行精细控制。
• logger.removeFilter(filt)
:从该日志记录器中删除特定过滤器。
• logger.filter(record)
:将日志记录应用日志记录器的过滤器,如果应予以处理,则返回 True,否则返回 False。
• logger.addHandler(hdlr)
:为该日志记录器添加日志处理程序(输出目标)。
• logger.removeHandler(hdlr)
:从该日志记录器中删除特定日志处理程序。
• logger.hasHandlers()
:检查日志记录器是否有任何已配置的日志处理程序。
这些方法和概念是 Python 日志模块的基础,可让您控制日志级别、过滤器、处理程序等,以便在应用程序中有效记录日志。
常用的处理程序:
除基本处理程序类外,还提供了许多有用的子类。
• StreamHandler:向控制台或类文件对象发送消息。
• FileHandler:向磁盘上的文件发送信息。
• RotatingFileHandler(旋转文件处理程序 向有大小限制和自动文件轮换的文件发送信息。
• TimedRotatingFileHandler:向基于时间轮换的文件发送信息。
• SocketHandler:通过网络套接字发送信息。
• DatagramHandler:通过 UDP 套接字发送信息。
• SMTPHandler:向电子邮件地址发送信息。
• SysLogHandler:向系统日志守护进程发送信息。
• NTEventLogHandler:向 Windows 事件日志发送消息。
• MemoryHandler:在内存中缓冲信息,并根据标准刷新。
• HTTPHandler:向 HTTP 服务器发送信息。
• WatchedFileHandler:监控并在日志文件发生变化时重新打开日志文件。
• QueueHandler:队列处理程序:向队列发送消息。
• NullHandler:忽略错误信息,对库开发人员很有用。
Python 日志基础知识
要使用 Python 的日志模块将事件记录到文件中,首先要从库中导入该模块,而且非常简单。
通过指定事件记录的文件名、调整格式、在追加和写入模式之间切换、设置记录级别阈值以及从可用选项中自定义属性来配置记录器。如示例所示,创建一个实例并使用其方法。
记录变量
这段代码展示了如何使用 logging.error()
函数记录错误信息,其中包括变量名的空格符 (%s)
。
import logging name = 'Rocky' logging.error(f'{name} raised an error') Output: ERROR:root:Rocky raised an error
记录所有级别
该代码显示了各级记录信息。
# 导入日志模块 import logging # 创建并配置日志记录器 logging.basicConfig(filename="newfile.log", # 指定日志文件名 format='%(asctime)s %(message)s', # 定义日志信息格式 filemode='w') # 将文件模式设置为 "w",以便写入。 # 创建日志记录器对象 logger = logging.getLogger() # 设置日志记录器的阈值为 DEBUG 级别 logger.setLevel(logging.DEBUG) # 记录不同严重程度的测试信息 logger.debug("A harmless debug message") # 调试级别信息 logger.info("Just providing some information") # 信息级消息 logger.warning("This is a warning") # 警告级别消息 logger.error("Have you attempted to divide by zero?") # 错误级别信息 logger.critical("The internet connection is down") # 严重级别信息 Output: DEBUG:root:A harmless debug message INFO:root:Just providing some information WARNING:root:This is a warning ERROR:root:Have you attempted to divide by zero? CRITICAL:root:The internet connection is down
提供日志配置的另一种表示方法。
file name : temp.conf [loggers] keys=root,simpleExample [handlers] keys=consoleHandler [formatters] keys=simpleFormatter [logger_root] level=DEBUG handlers=consoleHandler [logger_simpleExample] level=DEBUG handlers=consoleHandler qualname=simpleExample propagate=0 [handler_consoleHandler] class=StreamHandler level=DEBUG formatter=simpleFormatter args=(sys.stdout,) [formatter_simpleFormatter] format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
所提供的代码利用 "temp.conf "配置文件中指定的设置来初始化日志系统。然后创建一个名为 "simpleExample "的日志记录器,并使用一系列日志级别记录信息。
import logging import logging.config logging.config.fileConfig('temp.conf') logger = logging.getLogger('simpleExample') logger.debug('debug message') logger.info('info message') logger.warning('warn message') logger.error('error message') logger.critical('critical message') Output: 2023-09-01 13:04:35,581 - simpleExample - DEBUG - debug message 2023-09-01 13:04:35,581 - simpleExample - INFO - info message 2023-09-01 13:04:35,581 - simpleExample - WARNING - warn message 2023-09-01 13:04:35,581 - simpleExample - ERROR - error message 2023-09-01 13:04:35,582 - simpleExample - CRITICAL - critical message
Python 日志异常
在日志记录过程中使用异常,可以在特定情况下提示应用程序中的异常情况或错误,从而达到有价值的目的。当异常发生时,它就像一面红旗,会打断正常的程序流程,并告知调用者或日志系统所遇到的问题。
import logging # 配置日志系统 logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s') # 定义对给定值执行操作的函数 def perform_operation(value): if value < 0: raise ValueError("Invalid value: The value cannot be negative.") else: logging.info("Operation completed successfully.") try: input_value = int(input("Please input a numerical value: ")) perform_operation(input_value) except ValueError as ve: logging.exception("An exception occurred: %s", str(ve)) Output: Please input a numerical value: -6 ERROR:root:An exception occurred: Invalid value: The value cannot be negative. Traceback (most recent call last): File "<ipython-input-15-d0b160f9076e>", line 21, in <cell line: 16> perform_operation(input_value) File "<ipython-input-15-d0b160f9076e>", line 11, in perform_operation raise ValueError("Invalid value: The value cannot be negative.") ValueError: Invalid value: The value cannot be negative.
这样就可以记录系统的工作情况,随后进行分析。不过,为了防止文件过大,必须不断更新文件。
以上就是Python 日志记录模块的综合指南的详细内容,更多关于Python 日志记录模块的资料请关注脚本之家其它相关文章!
相关文章
深入了解Python中Pytest Markers的使用方法
从这篇开始,逐一解决fixture是啥,mark是啥,参数request是啥,钩子函数是啥,parametrize参数化是啥,这些问题,本片先介绍一下mark是啥,以及如何使用2023-09-09
最新评论