在 Python 中的日志记录库的帮助下使用 Log4j
本文解释了什么是 log4j,它是如何工作的,以及我们为什么要使用它。 我们还将了解如何借助日志库在 Python 编程语言中使用 log4j。
Log4j 概述及其使用重要性
log4j 是程序员在应用程序中记录数据时用来帮助他们的一款软件。 而且,记录数据意味着记录在应用程序中执行的活动或操作。
出于安全原因,我们可以使用 log4j,例如查看各种身份验证。 但是,它也可以用于记录应用程序中发生的事情以进行调试。
或者大致了解应用程序一直在做什么。 例如,log4j 是 Java 编程语言中的一个框架,它是一个半构建应用程序。
同样,在 Python 中,我们使用了日志记录模块而不是 log4j。 日志记录是将应用程序操作和状态记录到辅助接口的过程。 换句话说,将您的程序操作写入一个文件,但是您如何开始记录呢?
那么,您需要熟悉日志记录级别。 每个日志库都允许您在特定级别锁定信息。 您必须了解五个主要的日志记录级别。
级别 | 说明 |
---|---|
debug | 调试级别用于开发过程或错误修复和故障排除。 所有特定于开发人员的信息都在这一层之下。 |
info | 信息级别用于记录程序的任何重要默认操作,例如默认用户或系统查看操作。 |
warning | 警告级别用于记录从长远来看可能成为错误的事件。 此日志记录级别应该可以帮助您追踪错误。 |
error | 错误级别用于记录错误,错误是会以某种错误方式影响程序执行的错误。 |
critical | 临界级别为世界末日; 该程序已死或已严重损坏。 |
在 Python 中的日志记录库的帮助下使用 Log4j
现在我们只是运行一个简单的基本代码,并没有这样的逻辑,但我们想向您展示一些理解,比如如何将所有日志写入一个文件。
让我们进入代码,首先配置日志系统,调用 basicConfig()
方法,并使用 filename 参数传入文件名。 Python 会将所有日志消息写入此文件; 如果它不存在,Python 将创建它。
后面的参数是filemode,意思是file mode就是说是append mode到write mode还是随便你放什么,默认情况下,文件会以append mode创建。 接下来是表示asctime、levelname、message等很多信息的格式。
asctime 基本上显示了它在这个与日志相关的特定文本文件中打印的时间类型。 第二个参数值是一个叫做levelname的东西; 这个参数告诉我们在执行过程中发生了什么样的错误。
该消息是我们试图在该日志消息中打印的所有消息。 我们正在使用 datefmt; 此参数将按特定顺序打印时间。
basicConfig()
函数有一个不同的属性,我们可以从这里阅读所有属性。
import logging
logging.basicConfig(filename='demo.txt',
filemode='a',
format='%(asctime)s %(levelname)s-%(message)s',
datefmt='%Y-%m-%d %H:%M:%S')
Now we have written a simple logic where we compare the percentile with some numbers and append some logs inside the text file.
for i in range(0,15):
if i%2==0:
logging.error('Log error message')
elif i%3==0:
logging.warning('Log warning message')
elif i%5==0:
logging.debug('Log debug message')
elif i%7==0:
logging.critical('Log critical message')
else:
logging.info('Log info message')
输出:
2022-09-01 23:21:28 ERROR-Log error message
2022-09-01 23:21:28 ERROR-Log error message
2022-09-01 23:21:28 WARNING-Log warning message
2022-09-01 23:21:28 ERROR-Log error message
2022-09-01 23:21:28 ERROR-Log error message
2022-09-01 23:21:28 CRITICAL-Log critical message
2022-09-01 23:21:28 ERROR-Log error message
2022-09-01 23:21:28 WARNING-Log warning message
2022-09-01 23:21:28 ERROR-Log error message
2022-09-01 23:21:28 ERROR-Log error message
2022-09-01 23:21:28 ERROR-Log error message
运行程序后,我们可以注意到文本文件中没有添加信息和调试日志,因为默认情况下,levelname 调用错误,错误级别不显示信息和调试。
但是,我们可以通过在传递 logging.DEBUG 时使用 level 参数来使用其他级别。
level=logging.DEBUG
现在,如果我们运行并打开 demo.txt 文件,我们将看到所有日志消息,但如果我们将日志级别更新为 logging.ERROR,我们将看到错误和关键消息。
2022-09-01 23:23:57 ERROR-Log error message
2022-09-01 23:23:57 INFO-Log info message
2022-09-01 23:23:57 ERROR-Log error message
2022-09-01 23:23:57 WARNING-Log warning message
2022-09-01 23:23:57 ERROR-Log error message
2022-09-01 23:23:57 DEBUG-Log debug message
2022-09-01 23:23:57 ERROR-Log error message
2022-09-01 23:23:57 CRITICAL-Log critical message
2022-09-01 23:23:57 ERROR-Log error message
2022-09-01 23:23:57 WARNING-Log warning message
2022-09-01 23:23:57 ERROR-Log error message
2022-09-01 23:23:57 INFO-Log info message
2022-09-01 23:23:57 ERROR-Log error message
2022-09-01 23:23:57 INFO-Log info message
2022-09-01 23:23:57 ERROR-Log error message
让我们来看一个常见的问题,我们要将任何数字除以零。 要确定此操作,我们将使用 try 块。
如果操作失败,我们将进入 except 块并显示日志错误。
try:
1/0
except:
logging.error('Log zero division error occurs')
输出:
2022-09-02 00:29:48 ERROR-Log zero division error occurs
它是项目的重要组成部分,因为无论何时处理项目,您都可能必须编写这种日志记录机制。
完整的 Python 代码:
import logging
logging.basicConfig(filename='demo.txt',
filemode='w',
format='%(asctime)s %(levelname)s-%(message)s',
datefmt='%Y-%m-%d %H:%M:%S',
level=logging.DEBUG)
# for i in range(0,15):
# if i%2==0:
# logging.error('Log error message')
# elif i%3==0:
# logging.warning('Log warning message')
# elif i%5==0:
# logging.debug('Log debug message')
# elif i%7==0:
# logging.critical('Log critical message')
# else:
# logging.info('Log info message')
try:
1/0
except:
logging.error('Log zero division error occurs')
相关文章
在 Python 中使用 setLevel() 设置日志级别
发布时间:2023/06/14 浏览次数:82 分类:Python
-
Python 提供了一个单独的日志记录模块作为其标准库的一部分,以简化日志记录。 本文将讨论日志记录 setLevel 及其在 Python 中的工作方式。Python登录程序的功能
Python 日志记录传播
发布时间:2023/06/14 浏览次数:174 分类:Python
-
本文介绍了 LevelFilter 的使用,以显示如何将特定级别及更高级别(例如,INFO 及更高级别)的特定记录器名称的消息记录到特定的日志处理程序。Python 日志记录传播
Python 全局日志记录器
发布时间:2023/06/14 浏览次数:146 分类:Python
-
本文介绍 Python 中的日志记录模块。 它还介绍了日志记录级别及其重要性,从而生成了一个代码示例,演示了 Python 日志记录模块的全局使用。
在 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 时抛出异常