欢迎访问宙启技术站
智能推送

Python中LOGGING模块实现日志的格式化和过滤

发布时间:2024-01-15 00:55:13

日志是开发人员在调试和排查问题时非常有用的工具。Python的logging模块提供了一种简单且灵活的方式来生成日志。

日志的格式化是指将日志记录的内容按照一定的格式输出。logging模块提供了多种方式来格式化日志,包括使用格式字符串、日期时间等。

下面是一个使用logging模块的简单例子:

import logging

# 创建一个logger对象
logger = logging.getLogger('example')
logger.setLevel(logging.DEBUG)

# 创建一个输出日志到控制台的handler
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)

# 配置日志格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
console_handler.setFormatter(formatter)

# 将handler添加到logger对象中
logger.addHandler(console_handler)

# 记录日志
logger.debug('Debug message')
logger.info('Info message')
logger.warning('Warning message')
logger.error('Error message')
logger.critical('Critical message')

在上面的例子中,首先创建了一个名为example的logger对象,并设置日志的级别为DEBUG。然后创建了一个输出到控制台的handler,并设置其级别为DEBUG。接下来,创建了一个日志格式化对象,通过格式字符串规定了日志的显示格式。最后将handler添加到logger对象中,并记录了五条不同级别的日志。

上述例子的输出结果如下:

2021-03-31 15:30:42,020 - example - DEBUG - Debug message
2021-03-31 15:30:42,021 - example - INFO - Info message
2021-03-31 15:30:42,021 - example - WARNING - Warning message
2021-03-31 15:30:42,021 - example - ERROR - Error message
2021-03-31 15:30:42,021 - example - CRITICAL - Critical message

可以看到,每条日志的格式都按照之前定义的格式字符串进行了格式化。

除了格式化日志外,logging模块还提供了过滤日志的功能。可以通过设置logger对象和handler对象的过滤器来实现日志的过滤。

下面是一个使用过滤器的例子:

import logging

# 自定义过滤器
class OnlyErrorFilter(logging.Filter):
    def filter(self, record):
        return record.levelno >= logging.ERROR

# 创建一个logger对象
logger = logging.getLogger('example')
logger.setLevel(logging.DEBUG)

# 创建一个输出日志到控制台的handler
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)

# 设置过滤器
console_handler.addFilter(OnlyErrorFilter())

# 配置日志格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
console_handler.setFormatter(formatter)

# 将handler添加到logger对象中
logger.addHandler(console_handler)

# 记录日志
logger.debug('Debug message')
logger.info('Info message')
logger.warning('Warning message')
logger.error('Error message')
logger.critical('Critical message')

在上面的例子中,定义了一个名为OnlyErrorFilter的过滤器类,该过滤器只允许ERROR级别及以上的日志通过。然后创建了一个名为example的logger对象,并设置日志的级别为DEBUG。接下来创建了一个输出到控制台的handler,并将过滤器添加到该handler中。最后将handler添加到logger对象中,并记录了五条不同级别的日志。

运行上述代码后,只有ERROR、CRITICAL级别的日志被输出,DEBUG、INFO、WARNING级别的日志被过滤掉。

以上是关于Python中logging模块实现日志的格式化和过滤的介绍和示例。通过灵活运用logging模块,可以更好地控制日志的输出格式和级别,方便开发人员进行日志的记录和调试。