gpt4 book ai didi

log4net - 如何将配置属性列表读入自定义 log4net 过滤器

转载 作者:行者123 更新时间:2023-12-02 14:03:25 25 4
gpt4 key购买 nike

我正在 log4net 中创建自定义过滤器。我发现我可以将配置中的元素映射到过滤器类中的属性,如下所示:

<filter type="ConsoleApplication1.CustomFilter">
<FooKey value="FooValue"/>
</filter>

public class CustomFilter : FilterSkeleton
{
public string FooKey { get; set; }

public override FilterDecision Decide(LoggingEvent loggingEvent)
{
return FilterDecision.Accept;
}
}

我想做的是设置这样的项目列表:

<filter type="ConsoleApplication1.CustomFilter">
<FooKey value="FooValue"/>
<FooKey value="BarValue"/>
</filter>

public class CustomFilter : FilterSkeleton
{
public string[] FooKeys { get; set; }

public override FilterDecision Decide(LoggingEvent loggingEvent)
{
return FilterDecision.Accept;
}
}

如果这是可能的,我会怎么做?

最佳答案

您可以在 XmlHierarchyConfiguratorSetParameter 方法中找到负责此行为的代码。发生的事情是:

  • 如果 xml 元素引用属性,则会进行赋值
  • 如果 xml 元素引用方法,则将使用 xml 参数调用该方法

您无法从 *.config 文件分配数组,因为配置器仅处理标量值。但是,您可以创建一个方法将新参数推送到您的自定义过滤器:

public class CustomFilter : FilterSkeleton
{
public string[] FooKeys { get; set; }

public override FilterDecision Decide(LoggingEvent loggingEvent)
{
return FilterDecision.Accept;
}

public void AddFooKey(string text)
{
var temporaryFooKey = new List<string>(FooKeys ?? new List<string>().ToArray());
temporaryFooKey.Add(text);
FooKeys = temporaryFooKey.ToArray();
}
}

然后在您的配置文件中您可以执行以下操作:

<filter type="ConsoleApplication1.Filters.CustomFilter">
<FooKey name="AddFooKey" value="FooValue"/>
<AddFooKey value="BarValue"/>
</filter>

请注意,如果您不想更改 xml 元素的名称,您可以使用 name 属性来指定必须访问过滤器的哪一部分,并且您可以也可以直接使用方法名称。

关于log4net - 如何将配置属性列表读入自定义 log4net 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22844872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com