找回密码
 立即注册

QQ登录

只需一步,快速开始

python利用logging模块记载日志的操纵

2024-11-4 23:03| 发布者: ae2942d9| 查看: 174| 评论: 0

摘要: 目次如何利用 Python 的 logging 模块记载日志为什么要利用日志?根本利用记载一个简朴的日志输出到文件设置日志格式日志格式说明日志处理器和格式化器利用不同的处理器日志轮转结束语如何利用 Python 的 logging 模
目次

如何利用 Python 的 logging 模块记载日志

在编写 Python 程序时,日志记载是一个非常紧张的部分。日志不仅资助你在开发过程中调试代码,还可以在程序正式运行时提供诊断信息,资助定位问题。假如你正在构建一个复杂的体系大概开发大型应用程序,日志更是不可或缺的工具。Python 提供了强盛且机动的日志模块 logging,通过它,你可以记载各种范例的日志信息,从调试信息到错误报告。

在本文中,我们将介绍 Python 的 logging 模块,资助你了解如何利用这个模块来记载和管理日志。我们将从基础开始,渐渐扩展到更高级的利用方式,适合新手阅读。

为什么要利用日志?

在开始之前,让我们先了解一下为什么要利用日志。在编写程序时,调试通常是不可避免的。初学者可能会倾向于利用 [code]print()[/code] 语句来输出调试信息,这确实可以在简朴程序中起到作用。但随着程序的复杂性增长,[code]print()[/code] 的缺点就渐渐显现出来:

  1. 不可控:当你有许多 [code]print()[/code] 语句时,它们会出如今终端的各个地方,难以管理。
  2. 机动性差:你无法轻松地调解哪些信息应该被输出、生存到文件中大概发送到其他地方。
  3. 无法区分日志级别:[code]print()[/code] 不能区分输出的紧张性。例如,调试信息和错误信息都混在一起。

相比之下,[code]logging[/code] 模块具有以下上风:

  1. 多种日志级别:[code]logging[/code] 提供了多种日志级别,如 DEBUG、INFO、WARNING、ERROR 和 CRITICAL,资助你根据紧张性区分日志。
  2. 机动的输出方式:日志可以输出到控制台、文件,乃至可以通过网络发送到远程服务器。
  3. 可设置性强:你可以通过设置不同的日志记载器、处理器和格式化器来自界说日志的举动。

了解了这些配景后,让我们一步步深入了解如何利用 [code]logging[/code] 模块。

根本利用

首先,让我们从如何记载简朴的日志开始。要利用 [code]logging[/code] 模块,首先要导入它,并设置日志记载的基础设置。

[code]import logging [/code]

[code]logging[/code] 模块提供了一个简朴的 [code]basicConfig()[/code] 函数,用于设置根本的日志设置。你可以指定日志的输出格式、日志级别以及输出位置(例如文件或控制台)。

记载一个简朴的日志

我们可以从最根本的例子开始,记载一条简朴的日志:

[code]import logging logging.basicConfig(level=logging.DEBUG) logging.debug("这是一个调试信息") logging.info("这是一个信息") logging.warning("这是一个告诫") logging.error("这是一个错误") logging.critical("这是一个严峻错误") [/code]

在这个例子中,[code]basicConfig()[/code] 设置了日志级别为 [code]DEBUG[/code],这意味着从 [code]DEBUG[/code] 级别及更高的紧张级别的信息都会被记载并输出到控制台。每个日志级别表现不同的严峻性:

  • [code]DEBUG[/code]: 调试信息,最详细的日志,用于诊断问题。
  • [code]INFO[/code]: 普通运行时消息,比如程序启动或结束的信息。
  • [code]WARNING[/code]: 表现潜伏的问题,程序可能仍然正常运行。
  • [code]ERROR[/code]: 错误信息,但程序仍然可以继承运行。
  • [code]CRITICAL[/code]: 严峻错误,表现程序可能无法继承运行。

上面的代码输出如下:

[code]DEBUG:root:这是一个调试信息 INFO:root:这是一个信息 WARNING:root:这是一个告诫 ERROR:root:这是一个错误 CRITICAL:root:这是一个严峻错误 [/code]

输出到文件

在某些环境下,我们希望将日志输出到文件中,而不仅仅是在控制台表现。我们可以通过 [code]basicConfig()[/code] 的 [code]filename[/code] 参数来实现这一点:

[code]logging.basicConfig(filename='app.log', level=logging.INFO) [/code]

如今,全部的日志信息都将被写入到 [code]app.log[/code] 文件中,而不是表如今控制台。为了避免日志文件变得太大,你还可以设置日志文件的大小限制或按时间举行日志轮转(我们将在背面介绍)。

设置日志格式

默认的日志格式可能不够直观或易于阅读。荣幸的是,[code]logging[/code] 模块答应我们通过 [code]format[/code] 参数自界说日志的输出格式。一个常见的日志格式可能包罗时间戳、日志级别、消息等。

[code]logging.basicConfig( level=logging.DEBUG, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S' ) [/code]

在这个例子中,日志的格式被设置为:

[code]时间戳 - 日志记载器名称 - 日志级别 - 消息[/code]

输出可能如下所示:

[code]2024-10-07 10:45:23 - root - INFO - 这是一个信息 2024-10-07 10:45:23 - root - WARNING - 这是一个告诫 [/code]

日志格式说明

  • [code]%(asctime)s[/code]: 输出当前时间。
  • [code]%(name)s[/code]: 日志记载器的名称,通常为 [code]root[/code],假如没有特别设置。
  • [code]%(levelname)s[/code]: 日志级别名称,如 [code]INFO[/code]、[code]WARNING[/code]。
  • [code]%(message)s[/code]: 日志的详细消息内容。

通过自界说这些格式占位符,我们可以使日志变得更加清晰和易读。

日志处理器和格式化器

[code]logging[/code] 模块的强盛之处在于它利用了一个机动的层次布局来管理日志。这些层次布局由三个主要部分构成:

  1. 记载器(Logger):用于产生日志消息的入口,通常通过 [code]logging.getLogger()[/code] 来创建。
  2. 处理器(Handler):负责将日志消息发送到符合的输出位置(如控制台、文件或网络)。
  3. 格式化器(Formatter):界说日志的输出格式。

利用不同的处理器

除了利用 [code]basicConfig()[/code] 简朴设置日志,我们还可以手动设置日志记载器和处理器,从而实现更细致的控制。以下是一个利用控制台和文件处理器的例子:

[code]logger = logging.getLogger('my_logger') logger.setLevel(logging.DEBUG) # 创建一个控制台处理器 console_handler = logging.StreamHandler() console_handler.setLevel(logging.WARNING) # 创建一个文件处理器 file_handler = logging.FileHandler('app.log') file_handler.setLevel(logging.DEBUG) # 创建格式化器并添加到处理器 formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') console_handler.setFormatter(formatter) file_handler.setFormatter(formatter) # 将处理器添加到记载器 logger.addHandler(console_handler) logger.addHandler(file_handler) # 测试日志输出 logger.debug('这是一个调试信息') logger.info('这是一个信息') logger.warning('这是一个告诫') logger.error('这是一个错误') logger.critical('这是一个严峻错误') [/code]

在这个例子中,我们创建了一个自界说的日志记载器,并设置了两个处理器:一个用于将日志输出到控制台,另一个用于将日志输出到文件。不同的处理器可以设置不同的日志级别。例如,控制台处理器只记载 [code]WARNING[/code] 级别及以上的日志,而文件处理器记载全部日志。

日志轮转

在长时间运行的程序中,日志文件可能会变得非常大。为了防止日志文件过大,可以利用日志轮转机制。Python 提供了 [code]RotatingFileHandler[/code],可以在文件到达指定大小时自动创建新文件:

[code]from logging.handlers import RotatingFileHandler rotating_handler = RotatingFileHandler('app.log', maxBytes=2000, backupCount=5) logger.addHandler(rotating_handler) [/code]

在这个例子中,[code]app.log[/code] 文件最大为 2000 字节,日志文件凌驾这个大小后会自动创建一个新文件,最多生存 5 个旧文件。

结束语

Python 的 logging 模块是一个强盛且机动的工具,适用于各种规模的项目。从简朴的控制台日志到复杂的多处理器、多格式化器的日志体系,它都能轻松胜任。对于新手来说,明白 logging 的根本概念和利用方法是一个紧张的编程技巧。

在实际项目中,日志不仅可以资助你调试代码,还能记载程序运行时的紧张信息,资助你在程序出现问题时快速定位息争决问题。因此,纯熟把握日志记载的技巧对提拔编程效率大有裨益。

以上就是python利用logging模块记载日志的操纵的详细内容,更多关于python logging记载日志的资料请关注脚本之家别的相关文章!


来源:https://www.jb51.net/python/3285406e2.htm
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

最新评论

关闭

站长推荐上一条 /6 下一条

QQ|手机版|小黑屋|梦想之都-俊月星空 ( 粤ICP备18056059号 )|网站地图

GMT+8, 2025-7-1 19:43 , Processed in 0.030644 second(s), 19 queries .

Powered by Mxzdjyxk! X3.5

© 2001-2025 Discuz! Team.

返回顶部