python logging模块Filters过滤器介绍,如何使用自定义的过滤器

本文介绍了Python logging模块中如何定义和使用自定义过滤器,包括在代码中定义Filter,理解logging.Filter的filter()方法,以及在配置文件中配置自定义过滤器的实践方法。通过示例展示了过滤器如何影响日志记录行为,帮助读者更好地掌握日志过滤的灵活性。
摘要由CSDN通过智能技术生成

python的logging模块中,Filters 可被 HandlersLoggers 用来实现比按层级提供更复杂的过滤操作。

一、在代码中定义及使用Filter

先给一个直接使用的示例:

import logging

logger = logging.getLogger('dev')

hdl = logging.StreamHandler()
fmt = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
hdl.setFormatter(fmt)

# 重写过滤器类
class MyFilter(logging.Filter):
    def __init__(self, name):
        super().__init__(name=name)

    def filter(self, record):
        if record.levelno <= logging.WARNING:
            return True
        return False

flt = MyFilter('dev')
# 将过滤器应用到hdl处理程序
hdl.addFilter(flt)
logger.addHandler(hdl)
# 将过滤器应用到logger日志器
# logger.addFilter(flt)

logger_test1 = logging.getLogger('dev.test1')

logger.debug("This is a debug log.")
logger.info("This is an info log.")
logger.warning("This is a warning log.")
logger.error("This is an error log.")
logger.critical("This is a critical log.")

logger_test1.debug("This is a debug log.")
logger_test1.info("This is an info log.")
logger_test1.warning("This is a warning log.")
logger_test1.error("This is an error log.")
logger_test1.critical("This is a critical log.")

运行代码,输出:

2023-08-20 22:49:40,849 - dev - WARNING - This is a warning log.
2023-08-20 22:49:40,849 - dev.test1 - WARNING - This is a warning log.

解释:

  • 定义了一个MyFilter类,根据filter(record) 返回值决定是否要记录指定的记录?返回零表示否,非零表示是。示例中表示过滤掉高于logging.WARNING级别的日志。实例化MyFilter时,传了一个dev参数,它表示将对dev名称的日志器生效,然后将过滤器应用到处理程序hdl,然后hdl应用到logger日志器。
  • 输出结果中只有WARNING级别的日志,这是因为没有给loggerlogger_test1单独设置level级别,因此它默认使用了root根日志级别
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小青龍

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值