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

 更新时间:2023年12月26日 11:20:33   作者:简讯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 日志记录模块的资料请关注脚本之家其它相关文章!

相关文章

  • Django JSonResponse对象的实现

    Django JSonResponse对象的实现

    本文主要介绍了Django JSonResponse对象的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • Python命令启动Web服务器实例详解

    Python命令启动Web服务器实例详解

    这篇文章主要介绍了Python命令启动Web服务器实例详解的相关资料,需要的朋友可以参考下
    2017-02-02
  • python技巧分享Excel创建和修改

    python技巧分享Excel创建和修改

    这篇文章主要介绍了python技巧分享Excel创建和修改,openpyxl是一个读写Excel文档的Python库,能够同时读取和修改Excel文档。下面来看下文详细介绍,需要的小伙伴可以参考一下
    2022-02-02
  • Pytorch实现将模型的所有参数的梯度清0

    Pytorch实现将模型的所有参数的梯度清0

    这篇文章主要介绍了Pytorch实现将模型的所有参数的梯度清0,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • Python Conda安装包报错:PackagesNotFoundError两种解决方法

    Python Conda安装包报错:PackagesNotFoundError两种解决方法

    这篇文章主要给大家介绍了关于Python Conda安装包报错:PackagesNotFoundError的两种解决方法,这通常意味着安装程序正在寻找的环境包没有在 conda 的默认通道中找到,文中将解决的办法介绍的非常详细,需要的朋友可以参考下
    2024-06-06
  • Python上级目录文件导入的几种方法(from.import)

    Python上级目录文件导入的几种方法(from.import)

    有时候我们可能需要import另一个路径下的python文件,下面这篇文章主要给大家介绍了关于Python上级目录文件导入的几种方法,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-12-12
  • python数据分析必会的Pandas技巧汇总

    python数据分析必会的Pandas技巧汇总

    用Python做数据分析光是掌握numpy和matplotlib可不够,numpy虽然能够帮我们处理处理数值型数据,但很多时候,还有字符串,还有时间序列等,比如:我们通过爬虫获取到了存储在数据库中的数据,一些Pandas必会的用法,让你的数据分析水平更上一层楼
    2021-08-08
  • python 制作磁力搜索工具

    python 制作磁力搜索工具

    这篇文章主要介绍了如何用python 制作磁力搜索工具,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下
    2021-03-03
  • python爬虫学习笔记--BeautifulSoup4库的使用详解

    python爬虫学习笔记--BeautifulSoup4库的使用详解

    这篇文章主要介绍了Python中使用Beautiful Soup库的超详细教程,示例代码基于Python2.x版本,极力推荐!需要的朋友可以参考下
    2021-08-08
  • 详解pandas安装若干异常及解决方案总结

    详解pandas安装若干异常及解决方案总结

    这篇文章主要介绍了详解pandas安装若干异常及解决方案总结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01

最新评论