python - 如何删除日志过滤器/格式化程序
问题描述
我有以下日志过滤器:
class LogFilter:
"""
Print all messages that do not equal hello."""
def filter(self, record):
print ('@@@@@@@ Filter', record)
if getattr(record, 'msg') == 'Hello':
return False
return True
def __repr__(self):
return 'LogFilter'
进而:
import logging
handler = logging.StreamHandler()
handler.addFilter(LogFilter())
logger = logging.getLogger(__name__)
logger.addHandler(handler)
我将如何删除此过滤器?例如,当我尝试:
>>> handler.removeFilter(LogFilter())
>>> handler.removeFilter(LogFilter)
>>> handler.removeFilter('LogFilter') # ????
>>> handler.filters
[LogFilter] # filter is still there.
我还有过滤器。删除过滤器(或格式化程序)的正确方法是什么?
解决方案
如果您查看源代码removeFilter
def removeFilter(self, filter):
"""
Remove the specified filter from this handler.
"""
if filter in self.filters:
self.filters.remove(filter)
您会看到需要实际filter
对象才能将其删除。一个快速的解决办法是
import logging
handler = logging.StreamHandler()
LF = LogFilter()
handler.addFilter(LF)
logger = logging.getLogger(__name__)
logger.addHandler(handler)
然后,当您要删除过滤器时
>>> handler.removeFilter(LF)
>>> handler.filters
[]
推荐阅读
- xamarin.forms - 为什么 Syncfusion Xamarin.Forms DataForm 忽略列跨度的网格附加属性?
- android - 根据情况更改值,并保存到 SharedPreferences。如果情况发生变化,请分配新值而不是加载前一个值
- javascript - 未捕获的类型错误:如果 else 语句在反应中无法读取 null 的属性“样式”
- chart.js - Image-Chart ChartJs Ticks 回调不起作用?
- python - 如何使用 Pearson 1-r 作为距离度量在 Python 中运行 kmeans 集群?
- postgresql - 使用 Ansible 运行 Postgres 容器
- php - .htaccess 错误(ERR_TOO_MANY_REDIRECTS)
- matlab - 使用 2D 二值图像绘制具有固定高度的表面仅部分有效
- flutter - 没有为“_MyAppState”类型定义方法“Amplify”。-颤振放大
- c++ - std::any std::unique_ptr 不起作用?