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模块可以帮助我们更好地追踪程序的执行过程,快速定位问题。