1. 简介
logging模块是Python内置实现的一个日志记录工具,旨在为Python应用程序提供优雅的日志记录功能。logging模块可以轻松记录Python应用程序的事件信息和调试信息,以便程序员能够追踪和处理不同情况下的异常问题。
2. 日志级别
logging模块会记录应用程序中指定级别之上的日志信息。Python提供了5种记录日志信息的级别,分别为:DEBUG, INFO, WARNING, ERROR和CRITICAL。在默认情况下,logging模块会将日志级别设置为WARNING级别,这意味着默认情况下,logging模块会记录WARNING级别及以上的所有日志信息。
3. 使用logging记录日志
3.1 基本用法
logging模块提供了一组非常简单易用的接口,可以方便地在不同的位置记录日志。使用logging模块记录日志是非常简单的,开发人员只需要按照以下流程操作即可:
使用import引入logging模块
使用basicConfig()方法配置日志的格式和记录等级
使用不同的方法进行日志记录
下面展示一段使用logging模块进行日志记录的基本示例:
import logging
# 配置日志记录的基本参数
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')
# 使用不同的方法进行日志记录
logging.debug('这是一条debug日志')
logging.info('这是一条info日志')
logging.warning('这是一条warning日志')
logging.error('这是一条error日志')
logging.critical('这是一条critical日志')
在上述代码中,我们首先使用basicConfig()方法配置了日志记录的基本参数。其中,level参数指定了记录的等级为DEBUG级别,format参数定义了日志记录的格式,由asctime,levelname和message三个部分组成。其中,asctime部分使用了内置的时间格式化字符串,levelname部分为日志等级,message部分即为日志信息。
接下来,我们使用了5种不同的方法进行日志记录,与日志记录的等级对应。当我们运行该Python程序时,我们可以在控制台中看到输出了5种不同等级的日志信息,如下所示:
2020-12-27 13:59:21,628 - DEBUG - 这是一条debug日志
2020-12-27 13:59:21,628 - INFO - 这是一条info日志
2020-12-27 13:59:21,628 - WARNING - 这是一条warning日志
2020-12-27 13:59:21,630 - ERROR - 这是一条error日志
2020-12-27 13:59:21,630 - CRITICAL - 这是一条critical日志
3.2 配置日志级别
在使用logging模块记录日志时,我们还需要注意以下问题:
日志记录的等级对应不同类型的日志信息,我们需要根据实际情况设置合适的日志等级。
不同的模块可能需要不同的日志等级,我们需要为不同的模块设置不同的日志等级。
日志信息需要写入到不同的目的地,如控制台、文件等,我们需要为不同的目的地配置不同的日志处理器。
下面我们分别介绍如何解决以上问题。
3.2.1 配置日志等级
为了设置不同的日志等级,我们可以通过修改basicConfig()方法中的level参数来修改。例如,我们可以将日志等级设置为INFO级别,只记录INFO级别及以上的日志信息:
import logging
# 设置日志记录的等级为INFO
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
# 使用不同的方法进行日志记录
logging.debug('这条日志级别为DEBUG,不会被记录')
logging.info('这条日志级别为INFO,会被记录')
logging.warning('这条日志级别为WARNING,会被记录')
logging.error('这条日志级别为ERROR,会被记录')
logging.critical('这条日志级别为CRITICAL,会被记录')
此时,只有INFO、WARNING、ERROR和CRITICAL四种日志等级的信息会被记录,而DEBUG级别的日志信息将被忽略。
3.2.2 配置模块级别
在使用logging模块记录日志时,我们可以为不同的模块设置不同的日志等级。这样,对于一些模块,我们可以采用更为详细的调试信息,而对于一些模块,我们则只需要记录基本的日志信息。
为了为不同的模块设置不同的日志等级,我们可以创建多个logger对象,为每个logger对象设置不同的日志等级。logger对象是logging模块的核心之一,它提供了API,使得在不同的地方记录日志信息变得非常方便。
下面是一个简单的例子,其中我们为两个模块分别设置了不同的日志等级:
import logging
# 创建logger对象,并设置日志等级为INFO
logger1 = logging.getLogger('module1')
logger1.setLevel(logging.INFO)
# 创建logger对象,并设置日志等级为DEBUG
logger2 = logging.getLogger('module2')
logger2.setLevel(logging.DEBUG)
# 配置日志记录的基本参数
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')
# 记录日志信息
logger1.info('这是module1模块的一条info日志')
logger2.debug('这是module2模块的一条debug日志')
在上面的例子中,我们首先创建了两个logger对象,分别为模块module1和module2。然后,我们为这两个logger对象设置了不同的日志等级。在该例子中,我们将logger1对象的日志等级设置为INFO级别,而将logger2对象的日志等级设置为DEBUG级别。
接下来,我们使用basicConfig()方法配置了日志记录的基本参数。这样,当我们调用logger1.info()方法时,只有INFO及以上级别的日志信息会被记录,而logger2.debug()方法中的日志信息则会被记录下来。
3.2.3 配置日志处理器
logging模块支持将记录的日志信息写入到不同的目的地,如文件、控制台等。为了将记录的日志信息写入到指定的目的地,我们需要为日志记录配置不同的处理器。
日志处理器是logging模块的核心之一,它将日志信息发送到不同的目的地。在logging模块中,提供了多种处理器,如StreamHandler、FileHandler、TimedRotatingFileHandler等。
下面是一个简单的例子,其中我们将日志信息写入到文件和控制台:
import logging
# 创建logger对象,并设置日志等级为INFO
logger = logging.getLogger('example')
logger.setLevel(logging.INFO)
# 配置日志记录的基本参数
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')
# 创建文件处理器
fh = logging.FileHandler('example.log')
fh.setLevel(logging.DEBUG)
# 创建控制台处理器
ch = logging.StreamHandler()
ch.setLevel(logging.INFO)
# 配置日志处理器的格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
ch.setFormatter(formatter)
# 将文件处理器和控制台处理器添加到logger对象中
logger.addHandler(fh)
logger.addHandler(ch)
# 记录日志信息
logger.debug('这是一条debug日志')
logger.info('这是一条info日志')
logger.warning('这是一条warning日志')
logger.error('这是一条error日志')
logger.critical('这是一条critical日志')
在上面的例子中,我们首先创建了一个logger对象,并设置日志等级为INFO。然后,我们配置了日志记录的基本参数。
接下来,我们创建了文件处理器fh,并将文件处理器的日志等级设置为DEBUG级别。然后,我们创建了控制台处理器ch,并将控制台处理器的日志等级设置为INFO级别。通过设置Formatter对象来定义日志处理器的格式。
最后,我们将文件处理器和控制台处理器添加到logger对象中,并使用logger对象的不同方法记录日志信息。在该例子中,日志信息会被同时写入到文件example.log和控制台。
4. 结语
使用logging模块记录日志是Python中常用的工作之一。logging模块提供了简单易用的接口,方便开发人员在不同的位置记录日志信息。本文介绍了logging模块的基本用法,包括日志级别、logger对象以及日志处理器。通过阅读本文,您可以轻松使用logging模块记录日志信息,并根据实际需求进行配置。