如何在 Python 中使用日志模块(python使用日志记录模块)

作者 : 慕源网 本文共4158个字,预计阅读时间需要11分钟 发布时间: 2021-09-30 共275人阅读

介绍

在本文中,我们将学习如何使用 Python 中的日志记录模块?以下是我们将在本文中介绍的要点,

  • 为什么我们需要日志?
  • 如何在 Python 中使用日志记录模块?
  • 日志记录级别或严重性
  • 如何配置日志记录?
  • 如何格式化日志或显示消息?
  • 如何将错误或异常记录到文件中?
  • 例子

为什么我们需要日志?

在不记录的情况下很难找出应用程序中的问题或重大更改。日志记录跟踪应用程序运行时的事件和流程,还可以帮助开发人员轻松找到破坏性更改,轻松调试和修复它们。

如何在 Python 中使用日志记录模块?

该 日志 模块是Python标准库,所以你不需要单独安装的部分。该模块在 logging、logging.config 和 logging.handlers 模块的帮助下支持日志记录。它是一个非常强大的模块,易于配置和使用。以下是我们可以用来记录的方法:

  • print(): 将输出显示到控制台。
  • info( msg ,  *args ,  **kwargs ), debug( msg ,  *args ,  **kwargs ): 记录有关应用程序的事件或详细信息输出。
  • 警告(msg,  *args,  **kwargs ): 向用户记录有关应用程序中的事件或流的警告。
  • error( msg ,  *args ,  **kwargs ), exception( msg ,  *args ,  **kwargs ): 记录代码中的错误、语法错误或应用程序中的异常。
  • 关键(msg,  *args,  **kwargs ): 记录停止应用程序运行的错误。

笔记
在上面的 日志记录 方法中,有三个参数 – 第一个参数是“ msg ”,它只是我们想要记录或显示的消息。第二个参数 ‘ *args ‘ 只不过是我们可以使用字符串格式化操作符传递给消息的运行时间。第三个参数 ‘ **kwargs ‘,我们可以传递四个关键字参数,分别是 ‘ exc_info、  stack_info、  stacklevel 和 extra ‘。

exc_info – 默认值为“False”,如果设置为“ True ”,则会将异常信息添加到日志消息中。

stack_info – 默认值为“False”,如果设置为“ True ”,则会将堆栈信息添加到日志消息中。

stacklevel – 默认值为 1,如果它大于 1,那么在记录事件时将跳过堆栈帧的数量。

extra – 用于记录用户定义的属性,与消息合并。

日志记录级别或严重性

很少有预定义的级别或严重性,基于此 定义日志 功能名称。以下是级别及其数值和描述:

  • CRITICAL(50) – 由于该应用程序停止工作而导致的主要错误。
  • ERROR(40) – 由于某些错误或异常,应用程序的某些功能将无法工作。
  • WARNING(30) – 向用户表明某些代码将在功能中出错,但应用程序不会停止。
  • INFO(20) – 向用户表明应用程序按预期工作。
  • DEBUG(10) – 在调试应用程序时提供详细信息。

笔记
默认日志级别设置为“警告”,这意味着日志将获得此级别及更高级别。如果您想记录所有事件,那么在配置中我们需要设置级别“调试”,那么您将看到所有级别的日志。请参见下面的示例,您只会在输出中获得有关“警告”级别的日志。

简单的例子

import logging
logging.info('Info message goes here')
logging.warning('Warning message goes here')

输出

如何在 Python 中使用日志模块(python使用日志记录模块)

如何配置日志记录?

在上一节中,我们看到“INFO”日志不会记录消息。为了克服这个问题, 日志 模块提供了方法“ basicConfig(**kwargs) ”。借助此方法,我们可以对日志进行基本配置。以下是我们可以传递给它更多信息的常用参数列表

  • 文件名 –指定文件名。
  • filemode –要指定文件打开模式,默认为 'a'(append).
  • format – 指定日志的格式,默认为 attributes  levelname, name 并 message 以冒号分隔。
  • datefmt –指定“ time.strftime() ”接受的日期/时间格式。
  • style – 指定格式字符串的样式,默认为“%”。
  • level –要在此处指定记录器级别,默认值为“警告”。

简单的例子

上面的示例显示了如何配置记录器配置,我们使用了相同的示例,只是添加了记录器级别设置为“ INFO ”的配置行,因此在输出中您将看到两个日志。

import logging
logging.basicConfig(level=logging.INFO)
logging.info('Info message goes here')
logging.warning('Warning message goes here')

输出

如何在 Python 中使用日志模块(python使用日志记录模块)

如何格式化日志或显示消息?

要格式化日志或显示消息,我们需要在“ basicConfig(**kwargs) ”方法中设置“ format ”参数,如下例所示。以下是三种支持的样式字符串格式:

printf – ‘%(name)s:%(message)s’

str.format() – ‘{name}:{message}’

str.template – ‘$name:$message’

简单的例子

在下面的示例中,我们传递了参数“格式”,其值为“名称”、“级别名称”和“消息”。

import logging
logging.basicConfig(level=logging.INFO, format='%(name)s - %(levelname)s - %(message)s')
logging.info('Info message goes here')
logging.warning('Warning message goes here')

控制台输出

执行上述代码后,您将获得格式化的控制台输出,如下所示,

如何在 Python 中使用日志模块(python使用日志记录模块)

如何将错误或异常记录到文件中?

在日常开发中,开发人员使用控制台输出来检查代码中的问题、错误或错误,但在已部署应用程序的情况下,我们将如何检查?在这种情况下,我们必须写日志或将错误记录在文件中。使用相同的“日志记录” 模块,我们可以在“ basicConfig(**kwargs) ”方法中的文件参数的帮助下实现这一点,如下例所示。

简单的例子

在下面的例子中,我们传递了两个参数,第一个是’ filename=app.log ‘,第二个是’ filemode=’w’ ‘。

import logging
logging.basicConfig(level=logging.INFO, format='%(levelname)s - %(message)s', filename='app.log', filemode='w')
logging.info('Info message goes here')
logging.warning('Warning message goes here')

文件输出

当您按照我们在示例中提到的名称打开“ app.log ”文件时,您将看到如下输出,

如何在 Python 中使用日志模块(python使用日志记录模块)

例子

通过传递运行时数据自定义输出消息。

import logging
logging.basicConfig(format='%(levelname)s - %(message)s')
logging.warning('%s it, %s it!', 'Learn', 'Share')

输出:WARNING – Learn it, Share it!

使用“ asctime ”格式值和配置参数“ datefmt ”在消息中显示日期时间。

import logging
logging.basicConfig(format='%(levelname)s - %(asctime)s - %(message)s', datefmt='%m/%d/%Y %I:%M:%S %p')
logging.warning('%s it, %s it!', 'Learn', 'Share')

输出

警告 – 09/03/2021 08:52:34 AM – Learn it, Share it!

使用“ logging.error ”日志消息显示异常或堆栈跟踪。在下面的例子中,我们在’ error ‘函数中使用了’ exc_info=True ‘ ,’ exc_info ‘默认值为false,那么只会在输出中获取消息,这里我们将其设置为true,以便获取堆栈跟踪在输出中。

import logging
logging.basicConfig(format='%(levelname)s - %(asctime)s - %(message)s', datefmt='%m/%d/%Y %I:%M:%S %p')
arr = []
try:
 result = arr[0]
except Exception as e:
 logging.error("Exception occurred", exc_info=True)

输出

在输出中,您可以看到带有堆栈跟踪信息的消息。

错误 – 09/03/2021 09:03:07 AM – 发生异常
回溯(最近一次调用最后一次):
文件“D:\Demos\py\test.py”,第 7 行,<module>
结果 = arr[0 ]
IndexError:列表索引超出范围

使用“ logging.exception ” 日志消息显示异常或堆栈跟踪。

import logging
logging.basicConfig(format='%(levelname)s - %(asctime)s - %(message)s', datefmt='%m/%d/%Y %I:%M:%S %p')
arr = []
try:
 result = arr[0]
except Exception as e:
 logging.exception("Exception occurred")

输出

在输出中,您可以看到带有堆栈跟踪信息的消息。

错误 – 09/03/2021 09:13:57 AM – 发生异常
回溯(最近一次调用最后一次):
文件“D:\Demos\py\test.py”,第 7 行,<module>
结果 = arr[0 ]
IndexError:列表索引超出范围

结论

在本文中,我们学习了如何使用Python 中的logging 模块和简单示例来使用、配置、将日志写入文件 。如果您对本文有任何建议或疑问,请发表评论。


慕源网 » 如何在 Python 中使用日志模块(python使用日志记录模块)

常见问题FAQ

程序仅供学习研究,请勿用于非法用途,不得违反国家法律,否则后果自负,一切法律责任与本站无关。
请仔细阅读以上条款再购买,拍下即代表同意条款并遵守约定,谢谢大家支持理解!

发表评论

开通VIP 享更多特权,建议使用QQ登录