Python3教程: logging 模块用法

1. logging 模块简介

在 Python 程序中,我们经常需要记录日志,以方便后期调试与分析。而 logging 模块就是 Python 提供的一个可用于记录日志的标准模块。logging 模块提供了一系列丰富的功能,可以让我们对日志进行灵活的管理与处理。

2. logging 模块基本用法

2.1 创建 Logger 对象

在使用 logging 模块之前,我们需要先创建一个 Logger 对象,用于输出日志信息。Logger 对象是一个重要的中心化控制器,负责管理日志的流向和过滤等操作。Logger 对象用法如下:

import logging

logger = logging.getLogger('example')

其中,logger 的名称可以随意指定,但最好和模块名称相同,以方便日志管理与过滤。

2.2 创建 Handler 对象

在 Logger 对象创建以后,我们需要为其指定一个或多个 Handler 对象,用于处理记录的日志信息。Handler 对象可以将日志信息输出到屏幕、文件、邮件等不同的地方。Python 内置的 Handler 对象包括 ConsoleHandler 和 FileHandler,我们也可以自定义 Handler 对象。

下面是一个示例,用于将日志信息输出到控制台:

console_handler = logging.StreamHandler()

logger.addHandler(console_handler)

2.3 创建 Formatter 对象

为了使日志信息更加清晰可读,我们可以自定义每条日志输出的格式。这里我们可以使用 Formatter 对象来实现,它可以设置日志信息的输出格式、时间格式等。下面是一个示例:

formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")

console_handler.setFormatter(formatter)

在这个示例中,我们设置了日志信息的输出格式,其中 %asctime 表示日志记录时间,%name 表示 Logger 对象的名称,%levelname 表示日志的级别,%message 表示日志信息本身。

2.4 记录日志信息

在 Logger 对象、Handler 对象和 Formatter 对象都创建好之后,我们就可以开始记录日志信息了。在 logging 模块中,常见的日志级别包括 DEBUG、INFO、WARNING、ERROR 和 CRITICAL 五种。我们可以通过 Logger 对象的方法来记录这些不同级别的日志信息。下面是一个示例:

logger.debug('Debug message')

logger.info('Info message')

logger.warning('Warning message')

logger.error('Error message')

logger.critical('Critical message')

3. 高级用法

3.1 日志级别设置

在 Logger 对象上设置日志级别,可以控制输出的日志信息的级别。

logger.setLevel(logging.DEBUG)

在代码中指定 Logger 对象的级别是 DEBUG,那么在记录日志信息时低于 DEBUG 级别的信息就不会被输出。如果希望所有的日志信息都被输出,可以将日志级别设置为 NOTSET。

3.2 多重 Handler 处理

在使用 logging 模块时,我们还可以设置多个处理对象,并让它们按优先级顺序处理日志信息。

file_handler = logging.FileHandler('example.log')

file_handler.setLevel(logging.WARNING)

file_formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")

file_handler.setFormatter(file_formatter)

logger.addHandler(file_handler)

在这个例子中,我们创建了一个 FileHandler 对象,将日志信息输出到 example.log 文件中,并设置输出级别为 WARNING。由于在 Logger 对象中并没有设置输出级别,因此在这种情况下,所有日志信息都会输出到屏幕和文件中,但文件中的日志信息仅限于 WARNING 级别及以上的内容。

3.3 Filter 过滤器设置

当我们需要对日志信息进行一些高级的处理时,可以使用 Filter 对象来过滤记录的日志信息。在 logging 模块中,提供了一个 Filter 类来实现过滤器的功能。

class MyFilter(logging.Filter):

def filter(self, record):

return 'important' in record.getMessage()

logger_filter = MyFilter()

logger.addFilter(logger_filter)

logger.warning('This is an important warning message')

logger.warning('This is a normal message')

在这个例子中,我们定义了一个继承自 Filter 的过滤器类,当日志信息中包含 'important' 字符串时,才会输出日志信息。在 Logger 对象上添加了这个过滤器,在输出日志信息时,只有第一条消息被输出。

4. 总结

logging 模块是 Python 自带的日志处理模块,具有丰富的功能和灵活的使用方法。在实际开发中,合理使用这些功能可以极大地方便我们的调试和日志分析工作。对于初学者来说,在理解了 Logger 对象、Handler 对象和 Formatter 对象之后,建议多研究一下 Filter 过滤器的使用。

后端开发标签