1. 简介
日志是一份记录程序运行时发生事件的记录。日志包含的信息可以用于调试、故障排除、性能分析等方面。Python中提供了logging模块,用于记录日志信息。logging可以发送日志到多种输出位置,例如文件、标准输出等,并且可以配置不同级别的日志输出。本文将详细介绍Python中的logging模块。
2. logging模块常用类
2.1 Logger类
Logger类是logging模块的核心,主要用于程序中记录日志信息。Logger实例是用来对具体的应用程序进行日志记录的,每个记录器可以有多个处理器(handler),每个处理器可以有多个日志过滤器(filter) 。Logger对应用程序提供了接口,应用程序可以通过Logger实例来完成自己想要的logging。
Logger类提供了如下方法:
Logger.setLevel(): 设置logger的级别
Logger.addHandler(): 为logger增加一个handler
Logger.debug(): 记录debug级别的日志
Logger.info(): 记录info级别的日志
Logger.warning(): 记录warning级别的日志
Logger.error(): 记录error级别的日志
Logger.critical(): 记录critical级别的日志
2.2 Handler类
Handler类是用来处理日志信息的,通过它可以将日志信息输出到控制台或者文件中。
Handler类提供了如下方法:
Handler.setLevel(): 设置handler的级别
Handler.setFormatter(): 设置输出格式
2.3 Formatter类
Formatter类是用来设置日志输出的格式。
Formatter类提供了如下方法:
Formatter.format(): 格式化日志记录
3. logging配置
logging可以通过以下方式进行配置:
通过代码配置
通过文件配置
3.1 通过代码配置
import logging
logger = logging.getLogger('mylogger')
logger.setLevel(logging.DEBUG)
# 输出到控制台的handler
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
# 输出到文件的handler
fh = logging.FileHandler('myapp.log')
fh.setLevel(logging.WARNING)
# 设置输出格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
ch.setFormatter(formatter)
fh.setFormatter(formatter)
# 将handler添加到logger中
logger.addHandler(ch)
logger.addHandler(fh)
# debug级别的日志
logger.debug('debug message')
# info级别的日志
logger.info('info message')
# warning级别的日志
logger.warning('warning message')
# error级别的日志
logger.error('error message')
# critical级别的日志
logger.critical('critical message')
以上代码会将日志输出到控制台和文件中。日志级别为WARNING及以上级别的日志会输出到文件中,日志级别为DEBUG及以上级别的日志会输出到控制台和文件中。
3.2 通过文件配置
logging也可以通过文件配置,logging配置文件中可以包含多个handler和多个logger,每个logger可以有不同级别和不同的handler。
[loggers]
keys=root,sampleLogger
[handlers]
keys=consoleHandler,fileHandler
[formatters]
keys=sampleFormatter
[logger_root]
level=DEBUG
handlers=consoleHandler,fileHandler
[logger_sampleLogger]
level=DEBUG
handlers=consoleHandler
qualname=sampleLogger
propagate=0
[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=sampleFormatter
args=(sys.stdout,)
[handler_fileHandler]
class=FileHandler
level=WARNING
formatter=sampleFormatter
args=('myapp.log', 'w')
[formatter_sampleFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt=%Y-%m-%d %H:%M:%S
以上代码定义了一个名为sampleLogger的logger,它的输出级别为DEBUG,并且只会将日志信息输出到控制台(consoleHandler);还定义了一个名为root的logger,它的输出级别为DEBUG,并且会将日志信息输出到控制台(consoleHandler)和文件(fileHandler)中。
以上是一个简化版的logging配置文件,实际使用中还可以配置更多的参数,例如过滤器、缓存等。
4. 总结
logging是Python中的一个重要模块,它提供了非常强大的日志功能。通过使用logging,我们可以轻松地记录程序中的各种事件及其发生的环境。在进行debug和故障排除时,日志信息的使用非常重要,因为它能够让我们更好地了解程序发生了什么,而不需要打断程序的执行。
本文对logging模块的常用类和配置进行了介绍,对想要深入了解logging的读者来说是一个不错的起点。