Python日志记录工具utils.logging使用指南
Python的logging模块是Python标准库中的日志记录工具,用于记录程序运行时的各种信息,方便程序的调试和问题排查。logging模块提供了一个灵活且功能丰富的框架,可以满足不同场景下的日志记录需求。
### logging模块的主要组件
1. Logger: 日志记录的主体,用于创建Logger对象并进行日志记录。
2. Handler: 日志处理器,用于将日志记录发送到指定的目的地,如控制台、文件、邮件等。
3. Formatter: 日志格式化器,用于根据指定的格式对日志进行格式化。
4. Filter: 日志过滤器,用于过滤某些不符合条件的日志记录。
5. Level: 日志级别,用于设置日志的输出级别,如INFO、DEBUG、WARN、ERROR等。
### Logger对象的创建和配置
Logger对象是日志记录的主体,通过logging模块的getLogger方法创建,可以设置日志级别、添加处理器和过滤器等。
import logging
# 创建Logger对象
logger = logging.getLogger('my_logger')
# 设置日志级别
logger.setLevel(logging.DEBUG)
# 添加处理器
handler = logging.StreamHandler()
logger.addHandler(handler)
# 添加过滤器
filter = logging.Filter('my_module')
logger.addFilter(filter)
在上面的代码中,我们创建了一个名为'my_logger'的Logger对象,设置了日志级别为DEBUG,添加了一个StreamHandler处理器,并添加了一个过滤器' my_module'。
### Handler的配置
Handler是用于将日志记录发送到指定的目的地,logging模块提供了多种Handler类,可以将日志输出到控制台、文件、Email等不同的目的地。以下是一些常用Handler的使用示例:
1. 控制台输出
import logging
# 创建Logger对象
logger = logging.getLogger('my_logger')
# 创建StreamHandler对象
handler = logging.StreamHandler()
# 设置Formatter
formatter = logging.Formatter('%(levelname)s %(asctime)s %(message)s')
handler.setFormatter(formatter)
# 添加Handler
logger.addHandler(handler)
2. 文件输出
import logging
# 创建Logger对象
logger = logging.getLogger('my_logger')
# 创建FileHandler对象
handler = logging.FileHandler('my.log')
# 设置Formatter
formatter = logging.Formatter('%(levelname)s %(asctime)s %(message)s')
handler.setFormatter(formatter)
# 添加Handler
logger.addHandler(handler)
3. 邮件发送
import logging
import logging.handlers
# 创建Logger对象
logger = logging.getLogger('my_logger')
# 创建SMTPHandler对象
handler = logging.handlers.SMTPHandler(mailhost=('smtp.example.com', 25),
fromaddr='sender@example.com',
toaddrs='receiver@example.com',
subject='Test email',
credentials=('username', 'password'))
# 设置Formatter
formatter = logging.Formatter('%(levelname)s %(asctime)s %(message)s')
handler.setFormatter(formatter)
# 添加Handler
logger.addHandler(handler)
在上面的代码中,我们分别创建了StreamHandler、FileHandler和SMTPHandler,并设置了相应的参数。同时,还设置了Formatter用于对日志进行格式化。最后,将Handler添加到Logger对象中,即可实现将日志输出到指定的目的地。
### 日志级别的设置
Logger对象可以设置日志的输出级别,只有达到设置的日志级别或更高的级别时,相应的日志记录才会被输出。
|级别名称|级别值|适用场景|
|---|---|---|
|CRITICAL|50|严重的错误,程序无法继续运行|
|ERROR|40|错误,但程序仍然可以继续运行|
|WARNING|30|警告,可能会影响程序的正常运行|
|INFO|20|信息,程序运行的一些重要信息|
|DEBUG|10|调试,用于调试程序的细节信息|
设置日志级别的方式有两种,一种是通过Logger对象直接设置级别,另一种是通过单独的Handler设置级别。
import logging
# 创建Logger对象
logger = logging.getLogger('my_logger')
# 设置Logger级别
logger.setLevel(logging.DEBUG)
# 创建Handler对象
handler = logging.StreamHandler()
# 设置Handler级别
handler.setLevel(logging.ERROR)
# 添加Handler
logger.addHandler(handler)
在上面的代码中,我们将Logger对象的级别设置为DEBUG,即只输出DEBUG级别及以上的日志记录。同时,将Handler对象的级别设置为ERROR,只输出ERROR级别及以上的日志记录。
### 日志记录的格式化
Formatter对象用于对日志记录进行格式化,可以自定义日志输出的格式。Formatter对象通过Logger对象的addHandler方法添加到Handler对象中。
import logging
# 创建Logger对象
logger = logging.getLogger('my_logger')
# 创建Handler对象
handler = logging.StreamHandler()
# 创建Formatter对象
formatter = logging.Formatter('%(levelname)s %(asctime)s %(message)s')
# 设置Formatter
handler.setFormatter(formatter)
# 添加Handler
logger.addHandler(handler)
在上面的代码中,我们创建了一个自定义的Formatter对象,将其设置为Handler对象的Formatter。其中,format参数是一个字符串,用于指定日志输出的格式,并可以通过指定不同的格式化符号来显示不同的日志信息。
常用的格式化符号包括:
|符号|含义|
|---|---|
|%(levelname)s|日志级别的字符串表示|
|%(asctime)s|当前时间的字符串表示|
|%(message)s|日志具体内容的字符串表示|
### 日志记录的使用
Logger对象提供了多个方法用于日志记录,包括debug、info、warning、error和critical等。根据不同的日志级别,可以选择使用不同的方法进行日志记录。
import logging
# 创建Logger对象
logger = logging.getLogger('my_logger')
# 创建Handler对象
handler = logging.StreamHandler()
# 设置Formatter
formatter = logging.Formatter('%(levelname)s %(asctime)s %(message)s')
handler.setFormatter(formatter)
# 添加Handler
logger.addHandler(handler)
# 记录日志
logger.debug('debug message')
logger.info('info message')
logger.warning('warning message')
logger.error('error message')
logger.critical('critical message')
在上面的代码中,我们使用Logger对象的不同方法记录了不同级别的日志。日志记录的内容会被按照指定的格式输出到控制台。
通过上面的介绍,我们了解了Python的logging模块的使用指南,并提供了一些使用示例。通过合理地设置日志的级别、格式化方式和输出目的地,可以为程序的调试和问题排查提供很大的便利。
