详解Python自建logging模块

  • Post category:Python

详解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模块提供了多种输出方式,包括StreamHandlerFileHandlerRotatingFileHandlerTimedRotatingFileHandler等。

下面是一个将日志信息输出到控制台的示例:

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()等函数记录不同级别的日志信息。