如何从appender中删除最后一个过滤器?

问题描述

如何在运行时从 appender 中删除最后一个过滤器?我可以清除过滤器,我可以添加过滤器,但是这两种方法都会改变私有属性 m_tailFilter,因此当我将上一个过滤器之前的 Next 属性设置为 null 时,之后添加新过滤器不起作用。

appender.AddFilter(filter); // works fine

appender.ClearFilters(); // works fine and adding filter again also works

var lastFilter = appender.FilterHead; // save prevIoUsly last filter
appender.AddFilter(filter); // works fine
filter.Next = null; // works fine,i.e. removes the last filter
appender.AddFilter(filter); // doesn't work,i.e. this filter is ignored

解决方法

我会在这里发布我带来的东西。我不喜欢它,感觉很笨拙,我认为应该有更好的方法,但它似乎适用于我的场景。

filter.Next = null;
var f = appender.FilterHead;
appender.ClearFilters();
appender.AddFilter(f);

因此,从链中移除最后一个过滤器后,清除所有过滤器并再次添加头部,这样就正确设置了尾部。