C# log4net.Filter.PropertyFilter不工作

C# log4net.Filter.PropertyFilter不工作,c#,log4net,logentries,C#,Log4net,Logentries,我不熟悉Logentries在log4net过滤器上的工作,我尝试过其他过滤器,如“级别范围,stringtomatch,LoggerMatchFilter”,所有这些都工作正常,但属性过滤器不工作。我尝试过不同的解决方案,但也不起作用 这是我的密码: 代码: public class CustomFilter : FilterSkeleton { private bool acceptOnMatch; private readonly IList<IFilter>

我不熟悉Logentries在
log4net
过滤器上的工作,我尝试过其他过滤器,如“级别范围,
stringtomatch
LoggerMatchFilter
”,所有这些都工作正常,但属性过滤器不工作。我尝试过不同的解决方案,但也不起作用

这是我的密码:

代码:

public class CustomFilter : FilterSkeleton
{
    private bool acceptOnMatch;
    private readonly IList<IFilter> filters = new List<IFilter>();

    public override FilterDecision Decide(LoggingEvent loggingEvent)
    {
        if (loggingEvent == null)
            throw new ArgumentNullException("loggingEvent");

        foreach (IFilter filter in filters)
        {
            if (filter.Decide(loggingEvent) != FilterDecision.Accept)
                return FilterDecision.Neutral; // one of the filter has failed
        }

        // All conditions are true
        if (acceptOnMatch)
            return FilterDecision.Accept;
        else
            return FilterDecision.Deny;
    }

    public IFilter Filter
    {
        set { filters.Add(value); }
    }

    public bool AcceptOnMatch
    {
        get { return acceptOnMatch; }
        set { acceptOnMatch = value; }
    }

}
   <filter type="Namespace.CustomFilter, Assembly">
    <filter type="log4net.Filter.PropertyFilter">
      <key value="firstname" />
      <stringToMatch value="1234" />
    </filter>
    <filter type="log4net.Filter.PropertyFilter">
      <key value="address" />
      <stringToMatch value="abcdf" />
    </filter>
    <acceptOnMatch value="false" />
  </filter>
此处decision()函数位于filterskelton的上方,但属性筛选器未应用它。它无法从webconfig读取详细信息,但无法筛选日志消息。是否有我遗漏的内容


提前谢谢

如果其中一个过滤器返回FilterDecision.Neutral,则会记录日志消息。因此,您需要检查消息是否同时通过所有过滤器

            public override FilterDecision Decide(LoggingEvent loggingEvent)
            {
                if (loggingEvent == null)
                    throw new ArgumentNullException("loggingEvent");

                if (filters.All(x => x.Decide(loggingEvent) != FilterDecision.Accept))
                {
                    return FilterDecision.Neutral;
                }

                // All conditions are true
                if (acceptOnMatch)
                    return FilterDecision.Accept;
                else
                    return FilterDecision.Deny;
            }
更新: 我的log4net配置如下所示:

 <filter type="MyApp.CustomFilter, MyApp">
            <filter type="log4net.Filter.PropertyFilter">
              <key value="firstname" />
              <stringToMatch value="1234" />
            </filter>
            <filter type="log4net.Filter.PropertyFilter">
              <key value="address" />
              <stringToMatch value="abcdf" />
            </filter>
            <acceptOnMatch value="false"/>
          </filter>
        </appender>

loggingEvent为空。如何将数据分配给LoggingEvent。我必须将LoggingEvent和filters中的数据分配给哪个属性,并且也为null。我想澄清一下,您用作占位符的、命名空间和程序集?它不是来自项目的真正代码快照。在名称空间的位置,我在代码中保留了CustomFilter的名称空间。汇编如何?使用程序集名称而不是占位符。web配置筛选器正在读取,但属性筛选器未应用于日志消息。
 <filter type="MyApp.CustomFilter, MyApp">
            <filter type="log4net.Filter.PropertyFilter">
              <key value="firstname" />
              <stringToMatch value="1234" />
            </filter>
            <filter type="log4net.Filter.PropertyFilter">
              <key value="address" />
              <stringToMatch value="abcdf" />
            </filter>
            <acceptOnMatch value="false"/>
          </filter>
        </appender>
    Task.Run(() =>
    {
        log4net.ThreadContext.Properties["firstname"] = "123";
        Log.Info("123");
    });

    Task.Run(() =>
    {
        log4net.ThreadContext.Properties["firstname"] = "1234";
        Log.Info("1234");
    });

    Task.Run(() =>
    {
        log4net.ThreadContext.Properties["address"] = "abcdf";
        Log.Info("abcdf");
    });