python logging模块的使用

1. 什么是logging模块

在编写Python程序时,我们经常需要打印一些调试信息或者记录运行时的错误信息。为了更方便地进行日志记录,Python提供了logging模块。logging模块是Python内置的标准库,它提供了灵活的日志记录功能,可以根据不同的需求配置不同的日志级别,并将日志输出到控制台或者文件中。

2. logging模块的使用方法

2.1 创建Logger

在使用logging模块记录日志之前,我们首先需要创建一个Logger对象。Logger是整个logging模块的核心,它负责产生日志记录。

import logging

logger = logging.getLogger('mylogger')

上面的代码创建了一个名为"mylogger"的Logger对象。

2.2 设置日志级别

Logger对象有一个叫做"setLevel"的方法,用于设置日志的输出级别,它决定了哪些级别的日志会被记录。常用的日志级别有DEBUG、INFO、WARNING、ERROR和CRITICAL。

logger.setLevel(logging.INFO)

上面的代码将日志级别设置为INFO,只有INFO级别及以上的日志才会被记录。

2.3 创建Handler

Logger对象可以通过addHandler方法添加多个Handler,Handler负责将日志记录发送到不同的目的地,比如控制台、文件等。

console_handler = logging.StreamHandler()

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

logger.addHandler(console_handler)

logger.addHandler(file_handler)

上面的代码创建了一个控制台Handler和一个文件Handler,并将它们添加到Logger对象中。

2.4 设置日志格式

Handler对象有一个叫做"setFormatter"的方法,用于设置日志的格式。格式字符串中可以包含一些占位符,比如时间、日志级别、日志消息等。

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

console_handler.setFormatter(formatter)

file_handler.setFormatter(formatter)

上面的代码设置了日志的格式,格式包含了时间、日志级别和日志消息。

2.5 记录日志

Logger对象有多个方法可以用来记录日志。最常用的方法是debug、info、warning、error和critical,对应不同的日志级别。

logger.info('This is an info message.')

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

上面的代码分别记录了一条INFO级别和一条WARNING级别的日志。

2.6 设置全局日志级别

logging模块还提供了一个全局的日志级别,可以通过设置logging模块的全局日志级别,统一管理所有Logger对象的日志级别。

logging.getLogger().setLevel(logging.DEBUG)

上面的代码将全局日志级别设置为DEBUG,所有Logger对象的日志级别都将被设置为DEBUG。

3. 使用logging模块记录温度数据

假设我们有一个温度传感器,每隔一段时间就会读取一次温度,并将温度记录下来。我们希望使用logging模块记录温度数据,同时将日志输出到控制台和文件中。

3.1 定义温度传感器类

import logging

logger = logging.getLogger('temperature_logger')

console_handler = logging.StreamHandler()

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

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

console_handler.setFormatter(formatter)

file_handler.setFormatter(formatter)

logger.addHandler(console_handler)

logger.addHandler(file_handler)

class TemperatureSensor:

def __init__(self):

self.temperature = 0.6

def read_temperature(self):

logger.info(f'Read temperature: {self.temperature}')

sensor = TemperatureSensor()

sensor.read_temperature()

上面的代码定义了一个TemperatureSensor类,它有一个read_temperature方法用于读取温度。

3.2 日志输出示例

运行上面的代码,我们可以看到控制台和文件中会输出相应的日志信息:

2022-01-01 10:00:00 - INFO - Read temperature: 0.6

日志中记录了当前温度的读取信息。

4. 小结

本文介绍了Python logging模块的使用方法。通过创建Logger对象、设置日志级别、创建Handler对象、设置日志格式和记录日志,我们可以灵活地记录不同级别的日志,并将日志输出到不同的目的地。在实际项目中,使用logging模块可以帮助我们更好地追踪程序的执行过程,快速定位问题。

后端开发标签