登录Python
日志记录是一种跟踪某些软件运行时发生的事件的方法。日志记录对于软件开发、调试和运行很重要。如果您没有任何日志记录并且您的程序崩溃,那么您检测问题原因的机会就很小。而且如果查出原因,会耗费大量时间。使用日志记录,您可以留下面包屑痕迹,以便如果出现问题,我们可以确定问题的原因。
有许多情况,例如,如果您期望一个整数,给您一个浮点数,您可以获得一个云 API,服务因维护而停机等等。此类问题无法控制,难以确定。
为什么打印不是一个好的选择?
一些开发人员使用打印语句的概念来验证语句是否正确执行或发生了一些错误。但是打印不是一个好主意。它可以解决简单脚本的问题,但对于复杂的脚本,打印方法会失败。
Python有一个内置模块logging ,它允许将状态消息写入文件或任何其他输出流。该文件可以包含有关执行代码的哪一部分以及出现了哪些问题的信息。
日志消息的级别
日志消息有五个内置级别。
- 调试:这些用于提供详细信息,通常仅在诊断问题时才有意义。
- 信息:这些用于确认事情是否按预期工作
- 警告:这些用于表示发生了意外的事情,或者表示在不久的将来会出现一些问题
- 错误:这表明由于更严重的问题,该软件无法执行某些函数
- 严重:这表示严重错误,表明程序本身可能无法继续运行
如果需要,开发人员可以选择创建更多关卡,但这些足以应对所有可能的情况。每个内置级别都被分配了它的数值。
日志记录模块包含多个功能。它有几个常量、类和方法。所有大写的项目是常量,大写的项目是类,以小写字母开头的项目是方法。
模块本身提供了几个记录器对象。
- Logger.info(msg) :这将在此记录器上记录一条信息级别为 INFO 的消息。
- Logger.warning(msg) :这将在此记录器上记录一条警告级别的消息。
- Logger.error(msg) :这将在此记录器上记录一条级别为 ERROR 的消息。
- Logger.critical(msg) :这将在此记录器上记录一条 CRITICAL 级别的消息。
- Logger.log(lvl,msg) :这将在此记录器上记录具有整数级别 lvl 的消息。
- Logger.exception(msg) :这将在此记录器上记录一条级别为 ERROR 的消息。
- Logger.setLevel(lvl) :此函数将此记录器的阈值设置为 lvl。这意味着低于此级别的所有消息都将被忽略。
- Logger.addFilter(filt) :这会将特定的过滤器过滤添加到此记录器中。
- Logger.removeFilter(filt) :这会将特定过滤器过滤到此记录器中。
- Logger.filter(record) :此方法将记录器的过滤器应用于提供的记录,如果要处理记录,则返回 True。否则,它将返回 False。
- Logger.addHandler(hdlr) :这会将特定的处理程序 hdlr 添加到此记录器。
- Logger.removeHandler(hdlr) :这会将特定的处理程序 hdlr 删除到此记录器中。
- Logger.hasHandlers() :这将检查记录器是否配置了任何处理程序。
基础
使用日志记录模块在文件中记录事件的基础非常简单。
为此,只需从库中导入模块。
- 创建和配置记录器。它可以有几个参数。但重要的是,传递要在其中记录事件的文件的名称。
- 这里也可以设置记录器的格式。默认情况下,文件以附加模式工作,但如果需要,我们可以将其更改为写入模式。
- 此外,可以根据分配给每个级别的数值设置作为跟踪阈值的记录器级别。
有几个属性可以作为参数传递。 - 所有这些参数的列表在Python库中给出。用户可以根据需要选择需要的属性。
之后,创建一个对象并使用示例中所示的各种方法。
Python
# importing module
import logging
# Create and configure logger
logging.basicConfig(filename="newfile.log",
format='%(asctime)s %(message)s',
filemode='w')
# Creating an object
logger = logging.getLogger()
# Setting the threshold of logger to DEBUG
logger.setLevel(logging.DEBUG)
# Test messages
logger.debug("Harmless debug Message")
logger.info("Just an information")
logger.warning("Its a Warning")
logger.error("Did you try to divide by zero")
logger.critical("Internet is down")
上面的代码将使用提供的名称生成一个文件,如果我们打开该文件,该文件包含以下数据。