2010-06-30 8 views
13

내 응용 프로그램에 대한 이벤트 로그를 읽으려고합니다. EventLoggingApp. 문제는 내 단일 소스 (EventLoggingApp)에 대한 로그를 읽는 것입니다.C에서 이벤트 로그 읽기

이 코드는 모든 소스에 대한 로그를 읽습니다. 문제가 무엇입니까? 어떤 충고?

static void ReadEvenLog() 
{ 
    string eventLogName = "Application"; 
    string sourceName = "EventLoggingApp"; 
    string machineName = "Tom"; 

    EventLog eventLog = new EventLog(); 
    eventLog.Log = eventLogName; 
    eventLog.Source = sourceName; 
    eventLog.MachineName = machineName; 

    foreach (EventLogEntry log in eventLog.Entries) 
    { 
     Console.WriteLine("{0}\n",log.Source); 
    } 
} 

답변

-2

로컬 호스트에 연결 한 경우 MachineName을 "." 사용자가 이벤트 로그에서 읽을 권한이 있는지 확인하십시오.

+1

을 그가 모든 로그를 얻을 수 있기 때문에 자신의 컴퓨터에서 보안 문제가 없습니다. – atamanroman

4

MSDN의 article을 확인하십시오. 원본별로 이벤트 로그 항목을 읽을 수 없습니다. 로그 이름 만 중요합니다. 대신 foreach 루프에서 각 항목의 Source 속성을 확인하여 응용 프로그램 또는 필터 항목에 대해 별도의 이벤트 로그를 만들 수 있습니다.

+2

Thx, 슬로바키아 출신인데 eng가 내 것보다 훨씬 낫다. :) – Tom159

1

MSDN (1)(2)은 이벤트 로그 만 기록한다는 의미입니다.

원본에서 로그를 읽을 때만 지정할 필요는 없습니다. EventLog 인스턴스에 대한 로그 이름 및 MachineName (서버 컴퓨터 이름) 속성 만 지정할 수 있습니다. 두 경우 모두 항목 구성원은 이벤트 로그의 항목 목록으로 자동 채워집니다. 이 목록의 항목에 적절한 색인을 선택하여 개별 항목을 읽을 수 있습니다. (1)

0

나는 당신이 콘솔에서 인쇄하려고하는 것이 확실하지 않습니다. 당신이 인쇄하려는 각 이벤트 로그 항목에서 메시지 인 경우, foreach 루프 내부 대신이 있어야한다 :

Console.WriteLine(log.Message + "\n"); 
11

이 시도 :

EventLog log = new EventLog("Security"); 
var entries = log.Entries.Cast<EventLogEntry>() 
         .Where(x => x.InstanceId == 4624) 
         .Select(x => new 
         { 
          x.MachineName, 
          x.Site, 
          x.Source, 
          x.Message 
         }).ToList();