응용 프로그램 이벤트 로그를 주기적으로 폴링하여 새 항목을 확인하고 처리 한 후 나중에 .evtx 파일로 구문 분석하는 작업이 있습니다.EventLogQuery가 새 이벤트 로그 레코드를 반환하지 않습니다.
이 작업은 문제가되지 않습니다. 는 그 같은 코드를 사용하고 있습니다 :
using (var els = new EventLogSession())
{
string timeString = timestamp.ToString("yyyy-MM-ddTHH:mm:ss.fffZ");
string queryString = String.Format(
"<QueryList> <Query Id='0' Path='{0}'> <Select Path='{0}'> " +
"*[System[TimeCreated[@SystemTime>'{1}']]]</Select> </Query> </QueryList>",
logName, timeString);
var query = new EventLogQuery(logName, PathType.LogName, queryString) { Session = els };
var records = new List<EventRecord>();
using (var logReader = new EventLogReader(query))
{
EventRecord record;
while ((record = logReader.ReadEvent()) != null)
{
//log entries processed here
...
//finally export log messages to a file
els.ExportLogAndMessages(logName, PathType.LogName, queryString, fileName, true, CultureInfo.GetCultureInfo("en"));
}
}
}
는 불행하게도 내 PC를 다시 시작하고 응용 프로그램을 시작한 후 것을 발견 - EventLogReader 항상 동일한 데이터 집합을 반환, 내 응용 프로그램을 다시 시작하더라도. 즉, 새로운 메시지는 logReader.ReadEvent() 메서드에서 얻은 결과에 나타나지 않습니다.
그러나 쿼리 문자열을 간단한 별표로 변경하고이를 EventLogQuery로 전달하면이 상황이 해결되고 logReader는 새 메시지를 포함하여 모든 메시지를 반환합니다. 지금은 "*"쿼리 문자열을 사용하고 코드로 오래된 항목을 필터링하지만 이것이 나에게 가장 좋은 해결책은 아닙니다.
내 검색어에 실수가 있습니까? EventLogSession 또는 EventLogReader 객체를 처리하는 데 실수가 있습니까? 알려진 MS 버그입니까?