2017-04-17 8 views
1

꽤 일반적인 질문이라고 가정합니다. 서버 정보를 EventFlow 이벤트에 쉽게 추가하는 방법은 무엇입니까?EventFlow - 원본 서버 정보를 첨부하기 위해 사용자 지정 필터 만들기

시나리오에 따라 고유 한 환경의 EventFlowConfig.json이있는 응용 프로그램을 배포하지만 팜의 각 서버는 동일한 json 파일을 가져옵니다. 그래서 ... 팜의 어느 서버에서 ElasticSearch로 이벤트를 보냈는지 어떻게 알 수 있습니까?

하나의 옵션은 .net을 사용하여 servername을 가져 와서 열로 보내면 모든 이벤트에 서버 이름을 추가해야합니다. 약간 과장된 것처럼 보이지만 일을 할 것입니다. 이 이벤트를 실제로 코드화하는 것 외에도 쉬운 방법이 있기를 바랬습니다. 시간에 대한

감사합니다, 그렉

편집 4 - 캐롤이 날까지이 작업을 예를 얻을 수 있도록 실행 좋았어요 당신에게 카롤 감사합니다! 확장으로 사용자 정의 필터를 만들 추가하려고 : 우리는 사용자 정의 필터 공장 우리는 다음 두 번째 새로운 클래스를 만들 필요가 IFilter가 인터페이스를 구현해야

  • 에 대한 새로운 클래스를 만들 필요가

    1. . 공장에서 건강 모니터를 전달하기 위해 우리는 생성자를 사용했다.
    2. 그런 다음 우리 EventFlowConfig.json의 확장 영역에서 사용자 정의 필터를 참조 데이터 (eventData.AddPayloadProperty)를 추가 할 우리 지역으로 평가 기능을 사용합니다.
      a. 카테고리는 filterFactory

      b입니다. 유형은 클래스 이름입니다.

      c. 예를 들어 (필터 팩토리 이름을 'MyCustomFilterFactory'로 가정하면) : "My.Application.Logging.MyCustomFilterFactory, My.Application.Assembly.WhereCustomFilterAndItsFactoreLive"

    3. C# 코드가 살고 Microsoft.Extensions.Configuration에 대한 참조를 추가합니다.

    4. 을 그럼 당신은 당신이 여기에서 우리는 글로벌 필터

    작업을 사용하고, 필요 어디서나 사용자 정의 필터를 참조 할 수 있습니다 예 :

    EventFlow 구성에 그리고3210
    class CustomGlobalFilter : IFilter 
    { 
        private IHealthReporter HealthReporter; 
        private string MachineName; 
        public CustomGlobalFilter(string ServerName, IHealthReporter HealthReporter) 
        { 
         MachineName = ServerName; 
         this.HealthReporter = HealthReporter;    
        } 
    FilterResult IFilter.Evaluate(EventData eventData) 
        {    
         eventData.AddPayloadProperty("ServerName", MachineName, HealthReporter, "CustomGlobalFilter"); 
         return FilterResult.KeepEvent; 
        } 
    } 
    
    class CustomGlobalFilterFactory : IPipelineItemFactory<CustomGlobalFilter> 
    { 
        public CustomGlobalFilter CreateItem(IConfiguration configuration, IHealthReporter healthReporter) 
        {    
         CustomGlobalFilter GlobalFilter = new CustomGlobalFilter(System.Environment.MachineName, healthReporter);    
         return GlobalFilter; 
        } 
    } 
    

    :

    "filters": [ 
    { 
        "type": "drop", 
        "include": "Level == Verbose" 
    }, 
    { 
        "type": "CustomGlobalFilter" 
    } 
    ], 
    ... 
    "extensions": [ 
    { 
        "category": "filterFactory", 
        "type": "CustomGlobalFilter", 
        "qualifiedTypeName": "My.Company.Presentation.App.CustomGlobalFilter, My.Company.Presentation.App" 
    } 
    

    감사합니다, 그렉

  • +0

    작업 예제에서 EventFlow 구성의 잘못된 QualifiedTypeName을 보여 주면됩니다. 다음과 같아야합니다. "qualifiedTypeName": "My.Company.Presentation.App.CustomGlobalFilter ** Factory **, My.Company.Presentation.App" – James

    답변

    2

    이 EventFlow 오늘에 내장되어있는 것이 아닙니다,하지만 옵션은 최소한 몇 가지 있습니다 :

    1. Use EventFlow extensibility "볼"모든 이벤트에 이러한 속성을 추가하는 사용자 지정 필터를 추가 할 수 있습니다.
    2. 많은 로깅 라이브러리에는 컨텍스트 속성을 자동으로 추가하는 데 사용할 수있는 "초기화 프로그램"또는 "강화"개념이 있습니다.예 : in Serilog (EventFlow에서 기본적으로 지원됨)