Python 的日志记录你真的搞懂了吗?

本文详细介绍了Python的日志模块,包括其用法、级别(DEBUG、INFO、WARNING、ERROR、CRITICAL)、关键组件(Logger、Handler、Filter)以及常用处理程序,旨在帮助开发者实现高效、可维护的代码日志记录。
摘要由CSDN通过智能技术生成

这是一份 Python 日志模块的综合指南。

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

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

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

Python 日志级别

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

  • DEBUG:用于诊断问题的详细信息,在开发和调试过程中使用。
  • INFO:确认运行情况符合预期;关于程序执行情况的信息。
  • WARNING:表示潜在的问题或不一定妨碍程序运行的问题。
  • ERROR:表示更严重的问题,可能导致程序无法正常运行。
  • CRITICAL:通常会导致程序终止的严重错误;最严重的日志记录级别。

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

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

Constants:

  • Constants(常量)是代表日志级别的固定值,如 DEBUGINFOWARNINGERRORCRITICAL

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 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

在这里插入图片描述

二、Python必备开发工具

img

三、Python视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

五、Python练习题

检查学习结果。

img

六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

img

最后祝大家天天进步!!

上面这份完整版的Python全套学习资料已经上传至CSDN官方,朋友如果需要可以直接微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值