2014-04-03 5 views
4

log4net에서 사용자 정의 필터를 만들고 있습니다. 나는이 같은 필터 클래스의 속성에 구성 요소를 매핑 할 수 있습니다 발견했습니다사용자 정의 log4net 필터로 구성 등록 정보 목록을 읽는 방법

<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; 
    } 
} 

경우 : 나는이 같은 항목의 목록을 설정하고 싶으면 무엇

<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; 
    } 
} 

이것이 가능합니다. 어떻게해야합니까?

답변

5

메서드가 XmlHierarchyConfigurator 인 경우이 동작을 담당하는 코드를 찾을 수 있습니다. 무엇 증발하는 것은이다 : 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 특성을 사용하여 필터의 어떤 부분에 액세스해야하는지 지정하고 메서드 이름을 직접 사용할 수도 있습니다.