2015-12-07 48 views
2

考虑延长FilterSkeleton与属性名称MYNAME和扩展ApenderSkeleton访问来自附加器

一个appender类过滤属性有可能得到它接受了过滤器的MYNAME财产这条消息在appender的Append方法中?

protected override void Append(LoggingEvent loggingEvent) 
{ 
    //sudo 
    var somename = acceptedfilter.MyName; 

} 

回答

0

可以重写FilterEvent方法保存接受消息的过滤器,然后在Append检索:

public class FilteredAppender : AppenderSkeleton 
{ 
    private IFilter filter; 

    protected override bool FilterEvent(LoggingEvent loggingEvent) 
    { 
     IFilter f = this.FilterHead; 

     while (f != null) 
     { 
      if (f.Decide(loggingEvent) == FilterDecision.Accept) 
      { 
       filter = f; // Set the filter field 
       break; 
      } 

      f = f.Next; 
     } 

     return base.FilterEvent(loggingEvent); 
    } 

    protected override void Append(LoggingEvent loggingEvent) 
    { 
     NamedFilter acceptedfilter = filter as NamedFilter;    

     if (acceptedfilter!= null) 
     { 
       var somename = acceptedfilter.MyName; 
       // etc 
     } 
    } 
} 
+0

工作就像一个魅力谢谢。 (当我第一次看到该方法时,不确定我是“吸烟”)) – cechode