доступ к свойству фильтра из приложения

Дан класс, расширяющий FilterSkeleton, с именем свойства MyName и добавлением, расширяющим ApenderSkeleton.

возможно ли получить свойство MyName фильтра, который принял это сообщение в методе Append приложения?

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

}

person cechode    schedule 07.12.2015    source источник


Ответы (1)


Вы можете переопределить метод 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
        }
    }
}
person stuartd    schedule 08.12.2015
comment
Сработало как шарм, спасибо. (не уверен, что я курил, когда впервые увидел этот метод :)) - person cechode; 09.12.2015