详解Python自建logging模块
在Python中,logging模块是一个非常常用的模块,它可以帮助我们记录程序运行时的信息,包括错误、警告、调试信息等。本文将详细介绍如何使用Python自建logging模块,包括如何配置logging模块、如何记录日志信息、如何输出日志信息等。
配置logging块
在使用logging模块之前,我们先配置logging模块。logging模块的配置可以通过basicConfig()
函数或dictConfig()
函数进行配置。其中,basicConfig()
函数是logging模块的默认配置函数,可以通过设置不同的参数来配置logging模块。dictConfig()
函数则是通过字典来配置logging模块。
下面是一个使用basicConfig()
函数配置logging模块的示例:
import logging
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
在以上示例中,我们使用basicConfig()
函数配置logging模块,设置日志级别为DEBUG
,设置日志格式为asctime)s - %(name)s - %(levelname)s - %(message)s
。
下面是一个使用dictConfig()
函数配置logging模块的示例:
import logging.config
LOGGING_CONFIG = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'standard': {
'format': '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
},
},
'handlers': {
'console': {
'class': 'logging.StreamHandler',
'level': 'DEBUG',
'formatter': 'standard',
'stream': 'ext://sys.stdout',
},
},
'loggers': {
'': {
'handlers': ['console'],
'level': 'DEBUG',
'propagate': True
},
}
}
logging.config.dictConfig(LOGGING_CONFIG)
在以上示例中,我们使用dictConfig()
函数配置logging模块,设置日志级别为DEBUG
,设置日志格式为%(asctime)s - %(name)s - %(levelname)s - %(message)s
。
记录日志信息
在配置好logging模块之后,我们可以使用logging
模块的不同函数来记录日志信息。logging模块提供了多种函数,包括debug()
、info()
、warning()
、error()
、critical()
等。这些函数的作用是记录不同级别的日志信息。
下面是一个记录日志信息的示例:
import logging
logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
在以上示例中,我们使用logging
模块的不同函数记录不同级别的日志信息。
输出日志信息
在记录日志信息之后,我们需要将日志信息输出到不同的地方,比如控制、文件等。logging模块提供了多种输出方式,包括StreamHandler
、FileHandler
、RotatingFileHandler
、TimedRotatingFileHandler
等。
下面是一个将日志信息输出到控制台的示例:
import logging
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
console = logging.StreamHandler()
console.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
console.setFormatter(formatter)
logging.getLogger('').addHandler(console)
logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
在以上示例中,我们使用StreamHandler
将日志信息输出到控制台。
下面是一个将日志信息输出到文件的例:
import logging
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file = logging.FileHandler('test.log')
file.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file.setFormatter(formatter)
logging.getLogger('').addHandler(file)
logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
在以上示例中,我们使用FileHandler
将日志信息输出到文件。
示例说明
下面是完整的示例,演示了如何使用Python自建logging模块:
import logging
# 配置logging模块
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# 将日志信息输出到控制台
console = logging.StreamHandler()
console.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
console.setFormatter(formatter)
logging.getLogger('').addHandler(console)
# 将日志信息输出到文件
file = logging.FileHandler('test.log')
file.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file.setFormatter(formatter)
logging.getLogger('').addHandler(file)
# 记录日志信息
logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
在以上示例中,我们首先使用basicConfig()
函数配置logging模块,设置日志级别为DEBUG
,日志格式为%(asctime)s - %(name)s - %(levelname)s - %(message)s
。然后使用StreamHandler
将日志信息输出到控制台,使用FileHandler
将日信息输出到文件。最后使用debug()
、info()
、warning()
、error()
、critical()
等函数记录不同级别的日志信息。