2014-12-02 3 views
1

나는 다음과 같은 요구 사항원격 이벤트 로그 페이징

  • 자격 증명을 통해
  • 패스 원격 시스템의 이벤트 로그를 읽고 MVC 응용 프로그램

에서이를 통해

  • 페이지에 사용자를 허용 나의 연구에서 나는 이것이 EventLogQuery & EventLogReader과 결합 된 EventLogSession을 사용하여 달성 될 수 있다고 믿습니다.

    자격 증명이있는 원격 시스템에 성공적으로 연결하고 페이징 측면에서 벗어난 로그 파일을 읽었습니다. LINQ의 Skip에 해당하는 작업을 수행하는 방법을 모르겠습니다. & EventLogQuery를 사용하여 메서드를 가져옵니다.

    이러한 컴퓨터 중 일부는 20,000 개를 초과하는 로그를 가지며 페이징 전에 메모리에 모든 로그를로드하지 않도록하십시오.

    EventLogQuery로 페이징을 수행 할 수있는 방법이 있습니까?

  • 답변

    1

    여기에 yield return의 지연 평가 기능을 사용하여 접근하는 방법에 대한 아이디어가 있습니다. 다음과 같이 EventLogQuery를 사용하여 쿼리의 실행을 감안할 때, 당신이 할 수 있습니다 : 당신이 다음 IEnumerable에 좋아하는 LINQ 연산자를 사용하여 다음 쿼리를 실행 할 수 있습니다

    public IEnumerable<EventRecord> QueryEventRecords(string queryString) 
    { 
        var query = new EventLogQuery("Application", PathType.LogName, queryString); 
        using (var reader = new EventLogReader(query)) 
        { 
         EventRecord eventRecord; 
         while ((eventRecord = reader.ReadEvent()) != null) 
         { 
          yield return eventRecord; 
         } 
        } 
    } 
    

    . 바람직하지 않을 것 화면 페이징 사이의 반복자의 statefulness을 유지 -

    var result = QueryEventRecords("*[System[(Level = 3)]]") 
        .Skip(10) 
        .Take(10) 
        .ToList(); 
    

    원격 PC가 MVC 응용 프로그램에서 비행하지 않을 페이징, 말했다. 관심있는 검색어의 모든 이벤트를 원격 컴퓨터에서 미리 가져 와서 중앙 데이터베이스 (예 : SCOM과 같은 엔터프라이즈 소프트웨어와 유사)에 저장하는 것이 좋습니다. 그런 다음 EF와 같은 ORM을 사용하여 여가 시간에 이벤트 데이터를 탐색 할 수 있습니다.