Python日志教程示例|登录Python


Python日志教程示例|登录Python是今天的主题。日志记录模块定义了为应用程序和库实现灵活事件日志记录系统的函数和类。使用标准库模块提供的日志记录API的主要好处是所有Python模块都可以参与日志记录,因此您的应用程序日志可以包含与来自第三方模块的消息集成的消息。

内容概述

  • 1带有示例的Python日志教程
  • 2#Python中的记录模块
  • 3 #Logging基本配置
  • 4 #Formatting Python中的日志输出
  • 5 #Logging变量数据
  • 6类和函数

Python Logging Tutorial With Example

尽管日志记录至关重要,但并非所有开发人员都知道如何正确使用它我看到一些开发人员在开发时插入print语句,并在完成后删除这些语句。

它适用于程序是一个简单的脚本,但对于复杂的系统,最好不要使用这种打印方法。首先,您不能只在日志中留下必要的消息,您可能会在日志中看到大量垃圾消息,但找不到任何有效的消息。您也无法在不修改代码的情况下控制这些打印语句,您可能忘记删除那些未使用的打印件。并且所有打印的消息都进入stdout,当您将数据输出到stdout时这很糟糕。当然,您可以将消息打印到stderr,但是,使用print进行日志记录并不是一个好习惯。

日志记录是程序员工具箱中的一个方便工具。它可以帮助您开发程序流程并发现在开发应用程序时可能没有想到的场景。

日志为开发人员提供了额外的眼睛,他们总是关注应用程序正在经历的流程。他们可以存储信息,例如访问应用程序的用户或IP。如果发生错误,那么通过告诉您程序在到达发生错误的代码行之前的状态,它们可以提供比堆栈跟踪更多的见解。

通过从正确的位置记录有用的数据,您不仅可以轻松地调试错误,还可以使用数据分析应用程序的性能以规划扩展或查看使用模式以规划营销。

#Python中的日志记录模块

Python中的日志记录模块是随时可用且功能强大的模块,旨在满足初学者和企业团队的需求。

您可以使用以下代码行导入Logging模块。

导入日志记录

导入日志记录模块后,您可以使用称为“logger”的内容来记录您要查看的消息。默认情况下,总共有五个标准级别m表示事件的严重性。每个都有相应的方法,可用于记录该严重程度的事件。定义的级别如下:

  1. DEBUG
  2. 信息
  3. 警告
  4. 错误
  5. 危急

日志记录模块为您提供了默认记录器,使您无需进行许多配置即可开始使用。

#app.py import logging logging.debug('这是一个调试消息')logging.info('这是一条信息消息')logging.warning('这是一条警告消息')logging.error('这是一个错误消息')logging.critical('这是一个关键消息')

现在在终端中运行上面的文件,您可以看到以下输出。

Python Logging Tutorial With Example

从上面的输出中你可以注意到我们只获得了三个输出而不是五个。

上面的输出显示了每条消息之前的严重性级别以及根,即名称,日志记录模块为其默认记录器提供的名称。 (记录器将在后面的章节中详细讨论。)在这种格式中,显示由冒号(:)分隔的级别,名称和消息,是一种默认输出格式,可以配置为包括时间戳,行等内容号码和其他细节。

请注意,未记录debug()和info()消息。这是因为,默认情况下,日志记录模块会记录严重性级别为WARNING或更高级别的消息。您可以通过配置日志记录模块来更改它,以便根据需要记录所有级别的事件。您还可以通过更改配置来定义严重性级别,但通常不建议这样做,因为它可能会混淆您可能正在使用的某些第三方库的日志。

#Logging基本配置

您可以使用basicConfig(args)方法配置日志记录。

basicConfig()的常用参数如下。

  • level:根记录器将设置为指定的严重性级别。
  • filename:指定文件。
  • filemode:如果给出了文件名,则以此模式打开文件。默认值为a,表示追加。
  • form:这是日志消息的格式。

现在,请参阅以下Python日志记录示例。

#app.py import logging logging.basicConfig(level = logging.INFO)logger = logging.getLogger(__ name__)logger.info('开始阅读数据库')#read database here records = {'krunal':26,'ankit' :24} logger.debug('记录:%s',记录)logger.info('正在更新记录......')records = {'krunal':27,'ankit':25} #new记录在这里logger.info ('完成更新记录')

现在,运行上面的文件并查看输出。

记录基本配置

因此,通过使用级别参数,您可以设置要记录的日志消息级别。它可以通过传递类中可用的一个常量来完成,这将使得能够记录该级别或更高级别的所有日志记录调用。

如果之前没有调用过debug(),info(),warning(),error()和critical(),它们也会自动调用basicConfig()而不带参数。这意味着在第一次调用上述函数之一后,您无法再配置根记录器,因为它们会在内部调用basicConfig()函数。

您可以使用FileHandler将记录写入文件。请参阅以下代码示例。

#app.py import logging logger = logging.getLogger(__ name__)logger.setLevel(logging.INFO)#create a file handler handler = logging.FileHandler('info.log')handler.setLevel(logging.INFO)#create a logging format formatter = logging.Formatter('%(asctime)s  - %(name)s  - %(levelname)s  - %(message)s')handler.setFormatter(formatter)#将处理程序添加到logger logger.addHandler (处理程序)logger.info('查看info.log文件')

现在,运行该文件,并在与app.py文件名为info.log的同一目录中创建一个文件,现在可以看到该文件的输出。输出如下。

2019-06-07 23:02:03,617  -  __main__  -  INFO  - 请参阅info.log文件 

因此,您可以在文件系统中创建日志文件以跟踪应用程序中的更改。大多数Web框架和CMS遵循这种方法,以便当应用程序崩盘时,他们将看到这种日志文件以找出问题所在。

#Formatting Python中的日志输出

Python中的格式字符串很容易。与Logging模块相同。您可以将可以表示为字符串的变量作为消息传递给日志,并且一些基本元素已经是LogRecord的一部分,可以轻松添加到输出格式中。如果要记录进程ID以及级别和消息。请参阅以下代码示例。

#app.py import logging logging.basicConfig(format ='%(process)d  - %(levelname)s  - %(message)s')logging.warning('This statement is a Warning')

见下面的输出。

在Python中格式化日志输出

这是另一个可以添加当前日期和时间信息的示例。

import logging logging.basicConfig(format ='%(asctime)s  - %(message)s',level = logging.INFO)logging.info('Krunal已登录')

查看输出。

Python中的日志格式

%(asctime)添加创建LogRecord的时间。可以使用datefmt属性更改格式,该属性使用与Python datetime模块中的格式化函数相同的格式化语言,例如time.strftime()。

#Logging可变数据

日志记录方法将字符串作为参数,在单独的行中使用可变数据格式化字符串并将其传递给log方法似乎很自然。

但是这可以通过使用消息的格式字符串并将变量数据作为参数附加来直接完成。请参阅以下示例。

#app.py import logging name ='Krunal'logging.warning('%s引发警告',名称)

请参阅以下输出。

记录变量数据

传递给方法的参数将作为消息中的变量数据包含在内。

虽然您可以使用任何您想要的格式化样式,但Python 3.6中引入的f字符串是格式化字符串的绝佳方式,因为它们可以帮助保持格式简短且易于阅读。

#app.py import logging name ='Krunal'logging.warning(f'{name}发出警告')

Python中的日志记录方法

类和函数

您可以(并且应该)通过创建Logger类的对象来定义记录器,尤其是在应用程序具有多个模块的情况下。我们来看看Python模块中的一些类和函数。

日志记录模块中定义的最常见类如下。

  • 记录器:这是一个类,其对象将直接在应用程序代码中用于调用函数。

  • LogRecord:Loggers自动创建LogRecord对象,其中包含与记录事件相关的所有信息,例如记录器的名称,功能和行号,消息等。
  • 处理程序:处理程序将LogRecord发送到所需的输出目标,如控制台或文件。处理程序是子类的基础,如StreamHandler,FileHandler,SMTPHandler,HTTPHandler等。这些子类将日志记录输出发送到相应的目标,例如sys.stdout或磁盘文件。
  • Formatter:通过指定列出输出应包含的属性的字符串格式,可以在此处指定输出的格式。

我们主要处理Logger类的对象,它们使用模块级函数logging.getLogger()进行实例化。对具有相同名称的getLogger()的多次调用将返回对同一Logger对象的引用,这使我们无法将记录器对象传递到需要它的每个部分。

请参阅以下示例。

#app.py import logging logger = logging.getLogger('demo logger')logger.error('这是一个错误')

查看输出。

登录Python示例

因此,在本教程中,我们讨论了Python中的日志记录模块,记录基本配置,类和函数,记录变量和数据以及格式化日志记录输出。

最后,Python Logging Tutorial With Example |登录Python结束了。

资讯来源:由0x资讯编译自APPDIVIDEND,版权归作者Krunal所有,未经许可,不得转载
你可能还喜欢