如何在Python中配置logging库不记录特定内容或词汇?
如何在Python logging中过滤特定词汇或错误类型
当然有办法啦!Python的logging模块自带了灵活的过滤机制,最靠谱的方式就是自定义过滤器(Filter),不管你是想屏蔽特定词汇,还是不想记录某类错误,都能轻松实现。
一、过滤特定词汇
我们可以写一个自定义的Filter类,在日志被写入文件前检查消息内容,如果包含你不想记录的词汇,就直接跳过这条日志。
步骤1:定义过滤器类
import logging class BlocklistFilter(logging.Filter): def __init__(self, blocked_words): # 接收要屏蔽的词汇列表 self.blocked_words = blocked_words super().__init__() def filter(self, record): # 检查日志消息里有没有包含要屏蔽的词汇 log_message = record.getMessage() for word in self.blocked_words: if word in log_message: return False # 返回False就不会记录这条日志 return True # 返回True才会写入日志文件
步骤2:把过滤器加到你的日志配置里
直接修改你现有的代码,给FileHandler添加这个过滤器就行:
fname = "your_log_file.log" # 把你要屏蔽的词汇放在这里 blocked_words = ["秘密", "敏感数据", "不想看到的词"] # 创建文件处理器 file_handler = logging.FileHandler(fname, 'w', 'utf-8') # 给处理器加上我们的过滤器 file_handler.addFilter(BlocklistFilter(blocked_words)) # 完成日志配置 logging.basicConfig( handlers=[file_handler], level=logging.DEBUG, format='%(asctime)s: %(message)s' )
二、过滤特定类型的错误
如果是想屏蔽某类异常(比如ValueError、ConnectionError这类)的日志,我们可以在过滤器里检查日志的异常信息:
定义异常过滤器类
class BlockExceptionFilter(logging.Filter): def __init__(self, blocked_exceptions): # 把要屏蔽的异常类转成元组,方便后续判断 self.blocked_exceptions = tuple(blocked_exceptions) super().__init__() def filter(self, record): # 检查这条日志是否携带异常信息 if record.exc_info: exc_type, exc_value, _ = record.exc_info # 如果异常属于我们要屏蔽的类型,就跳过记录 if isinstance(exc_value, self.blocked_exceptions): return False return True
使用方式
比如你不想记录ValueError和TypeError的日志,就把这个过滤器也加到处理器上:
file_handler.addFilter(BlockExceptionFilter([ValueError, TypeError]))
小提示
你还可以同时添加多个过滤器,比如既屏蔽特定词汇,又屏蔽特定异常,日志处理器会依次执行每个过滤器的检查,只要有一个过滤器返回False,这条日志就不会被记录。
内容的提问来源于stack exchange,提问作者Ethan
相关产品推荐
相关产品推荐

