python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python 日志记录模块

Python 日志记录模块的综合指南

作者:简讯Alfred

这篇文章主要为大家介绍了Python 日志记录模块的综合指南,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

Python 日志模块的综合指南

日志记录是软件开发的一个重要方面,它允许开发人员跟踪和管理应用程序的行为。Python 提供了一个功能强大的日志模块,可提供灵活和可定制的日志功能。在本文中,我们将深入探讨 Python 日志模块,包括其用法、优点和高级功能。

是什么让 print 语句变得不伦不类?

print 语句被认为不是很 Pythonic,因为它们通常用于临时调试,会使代码变得杂乱无章。一旦你调试完代码,你就需要返回并删除所有你写的 print 语句。相反,Python 鼓励使用日志模块,它可以更好地控制消息、级别和目的地,同时有助于保持代码更整洁、更有条理。

相关阅读:Python 的 print 函数你真的会用了吗?

Python 日志级别

在 Python 的日志模块中,有多个日志级别,每个级别都有自己的意义和用例。以下是标准日志级别及其简要说明:

• DEBUG:用于诊断问题的详细信息,在开发和调试过程中使用。

• INFO:确认运行情况符合预期;关于程序执行情况的信息。

• WARNING:表示潜在的问题或不一定妨碍程序运行的问题。

• ERROR:表示更严重的问题,可能导致程序无法正常运行。

• CRITICAL:通常会导致程序终止的严重错误;最严重的日志记录级别。

开发人员可以根据需要定义其他日志记录级别,不过现有级别通常足以应对大多数情况。每个内置日志记录级别都有一个特定的数值来表示其重要性。

下面是 Python 日志模块中关键组件和方法的简化解释:

Constants:

• Constants(常量)是代表日志级别的固定值,如 DEBUGINFOWARNINGERROR 和 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 日志记录模块的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文