Python 全局日志记录器
本篇文章介绍了日志记录、它的各种级别以及它在 Python 中的重要性。 然后,我们将学习如何在全局范围内使用 Python 日志记录模块。
日志记录简介及其在 Python 中的重要性
日志记录是一种跟踪运行软件时发生的事件的方法。 软件开发人员添加日志记录调用以记录某人执行程序时发生的错误和事件。
在 Python 编程中,我们有一个称为日志记录的内置模块,可以记录此类错误和事件。 请注意,事件是消息,可以选择保存特定于事件的数据。
这些事件可以具有不同的级别/严重性,由软件开发人员指定。 因此,我们可以说日志记录是一个非常强大的工具,可以调试我们的应用程序并跟踪任何需要的信息。
日志记录模块为我们的应用程序提供了不同的方法来配置各种日志处理程序,将日志消息路由到这些处理程序,并启用高度灵活的配置,这有助于处理各种用例。
logging模块也有不同的日志级别,帮助我们应对各种严重级别。 以下是日志记录级别的简要说明:
- INFO - 它确认各种事情都按预期工作。
- DEBUG - 当有人诊断问题时,它提供典型的详细信息。
- WARNING - 它表示意外发生的事情。 我们也可以说 WARNING 表示可能很快会发生的问题,例如磁盘空间不足。
- CRITICAL - 它表示应用程序本身无法继续执行的严重错误。
- ERROR - 它代表一个更严重的问题,不允许程序执行操作或功能。
在 Python 中全局使用日志记录模块
我们可以在 Python 中本地和全局使用日志记录模块。 这里,locally是指在特定范围内使用logging模块; 例如,我们在A.py文件中引入了logging模块,所以我们只能在A.py中使用它,而不能在B.py文件中使用。
另一方面,全局意味着在 A.py 文件和 B.py 文件中到处使用。 了解本地日志记录模块的使用对于学习 Python 全局记录器很重要。
示例代码在本地使用日志记录模块(保存在 test.py 文件中):
import logging
logger = logging.getLogger("test_logger")
logger.setLevel(logging.INFO)
def sum_numbers(number1, number2):
try:
output = number1 + number2
except TypeError:
logger.exception("Oh! TypeError Occurred")
else:
return output
result = sum_numbers(10, 'Mehvish')
在这里,我们在导入的 test.py 文件中本地使用日志记录模块。
然后,我们使用 getLogger()
开始使用 Python 中的日志记录模块进行日志记录。 为此执行工厂函数 logging.getLogger(name)
。
getLogger()
接受一个参数,即记录器的名称,并返回对记录器实例(记录器的对象)的引用,如果指定则使用名称,否则返回根。
请注意,多次调用具有确切名称的 getLogger()
会返回对同一记录器实例的引用,这对于全局使用它很有用(我们稍后会看到)。
接下来,我们使用 setLevel()
方法设置日志记录的级别,并编写 sum_numbers() 函数,它接受两个 int 类型的数字,将它们相加,如果给定的值正确,则返回结果; 否则,它会生成 TypeError。
最后,我们调用 sum_numbers()
通过生成以下结果来查看我们的日志记录模块的运行情况。
输出:
Oh! TypeError Occurred
Traceback (most recent call last):
File "E:\Code\use_logging_locally\test.py", line 8, in sum
output = number1 + number2
TypeError: unsupported operand type(s) for +: 'int' and 'str'
使用日志模块非常简单,但是如何在全局范围内利用这个模块呢? 让我们在下面学习。
示例代码(保存在 log.py 文件中):
import logging
def set_custom_logger(name):
formatter = logging.Formatter(
fmt='%(asctime)s - %(levelname)s - %(module)s - %(message)s'
)
handler = logging.StreamHandler()
handler.setFormatter(formatter)
logger = logging.getLogger(name)
logger.setLevel(logging.DEBUG)
logger.addHandler(handler)
return logger
示例代码(保存在 submodule.py 文件中):
import logging
logger = logging.getLogger('root')
logger.debug('submodule message')
示例代码(保存在 main.py 文件中):
import log
logger = log.setup_custom_logger('root')
logger.debug('main message')
import submodule
输出:
2022-10-27 09:31:02,447 - DEBUG - main - main message
2022-10-27 09:31:02,450 - DEBUG - submodule - submodule message
此代码示例打印日期、时间、日志记录级别、模块名称和消息。
请注意
,我们在 submodule.py 中使用了logging.getLogger()
来使用我们在 log.py 文件中使用的确切记录器实例。
如何? logging.getLogger(name)
通常运行以开始使用 Python 中的日志记录模块进行日志记录。 getLogger() 接受一个参数,即记录器的名称。
通过使用 getLogger()
函数,我们可以获取对具有给定名称(如果提供)或根目录(如果未指定)的记录器实例的引用。
多次调用具有确切名称的 getLogger()
会返回对确切记录器对象的引用,这有助于我们在全局范围内使用它。
相关文章
在 Python 中可视化树
发布时间:2023/06/14 浏览次数:150 分类:Python
-
由于许多不同的原因,决策树是一种常见的监督学习技术。 决策树的优点包括我们可以将它们用于分类和回归,它们不需要特征缩放,而且决策树易于阅读。本文介绍了 Python 的 Graphviz 来显示
在 Python 中打印二叉树
发布时间:2023/06/14 浏览次数:101 分类:Python
-
本文将讨论二叉树以及我们如何使用它。 我们还将看到如何使用 Python 打印它。我们将了解在处理二叉树时使用的术语。 我们还将研究使用 Python 代码的二叉树示例。
Python 中的二维插值
发布时间:2023/06/14 浏览次数:149 分类:Python
-
本文展示了如何在 Python 中进行插值,并研究了不同的 2d 实现方法。 我们将讨论用于双变量插值的有用函数,例如 scipy.interpolate.interp2d、numpy.meshgrid 和 Python 中使用的用于平滑/插值 (RBF) 的径向
Python 中的 3D 插值
发布时间:2023/06/13 浏览次数:121 分类:Python
-
插值是在离散集的定义范围内构造新数据点的方法。 插值意味着找到点或曲线之间的值。从数学的角度来看,插值是获取位于其他已知数据点之间的特定未知数据点的值。插值的重要性
在 Python 中重新抛出异常
发布时间:2023/06/13 浏览次数:53 分类:Python
-
Python 为我们提供了 try-except 块来处理程序中的异常。 它还为我们提供了 raise 语句来手动抛出异常。本文将讨论如何在 Python 程序中重新抛出异常。在 Python 中抛出异常
Python 模拟引发异常
发布时间:2023/06/13 浏览次数:160 分类:Python
-
本文的主要目的是演示如何在使用单元测试库 unittest 时抛出异常。在 Python 中使用单元测试库 unittest 时抛出异常
Python打开文件异常处理
发布时间:2023/06/13 浏览次数:146 分类:Python
-
要打开文件,Python 有一个名为 open() 的内置函数,用户可以通过它读取或写入文件,但是如果在任何情况下文件丢失或编译器无法访问,那么,我们 遇到 FileNotFoundError。 本文将介绍如何处理
Python 绘图 CSV
发布时间:2023/06/13 浏览次数:67 分类:Python
-
CSV 代表逗号分隔值,一种存储结构化数据的流行格式。 CSV 文件包含具有行和列的表格形式的数据。我们经常需要可视化存储在 CSV 文件中的数据。 为此,Python 提供了不同类型的数据可视化图
Python 绘制决策边界
发布时间:2023/06/13 浏览次数:52 分类:Python
-
为此,我们将使用 Sklearn 库提供的内置预处理数据(无缺失数据或异常值)数据集包来绘制数据的决策边界。 然后我们将使用 Matplotlib 的库来绘制决策边界。