如何在 Python 中使用日志模块(python使用日志记录模块)
介绍
在本文中,我们将学习如何使用 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')
输出
如何配置日志记录?
在上一节中,我们看到“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')
输出
如何格式化日志或显示消息?
要格式化日志或显示消息,我们需要在“ 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')
控制台输出
执行上述代码后,您将获得格式化的控制台输出,如下所示,
如何将错误或异常记录到文件中?
在日常开发中,开发人员使用控制台输出来检查代码中的问题、错误或错误,但在已部署应用程序的情况下,我们将如何检查?在这种情况下,我们必须写日志或将错误记录在文件中。使用相同的“日志记录” 模块,我们可以在“ 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 ”文件时,您将看到如下输出,
例子
通过传递运行时数据自定义输出消息。
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 模块和简单示例来使用、配置、将日志写入文件 。如果您对本文有任何建议或疑问,请发表评论。
常见问题FAQ
- 程序仅供学习研究,请勿用于非法用途,不得违反国家法律,否则后果自负,一切法律责任与本站无关。
- 请仔细阅读以上条款再购买,拍下即代表同意条款并遵守约定,谢谢大家支持理解!