2009-12-14 3 views
23

를 작성되지 않습니다 내가 MSDN을 읽은 뭔가를 누락하지 않는 한, 지금으로 EventLog.CreateEventSource는이 같은 일부 코드가 사용자 정의 로그

EventLog.CreateEventSource("myApp", "myAppLog"); 
EventLog.WriteEntry("myApp", "Test log message", EventLogEntryType.Error); 

을이 야기한다 새 로그 'myAppLog'를 만들 수 소스 뷰어 'myApp'를 사용하여 새 로그에 항목을 추가해야합니다. 그러나 새로운 로그를 만들 수는 없습니다. 이것은 항상 'myApp'소스 - 'myAppLog'가 보이지 않는 오류 로그 메시지를 응용 프로그램 로그에 씁니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 관리자로 로그인했습니다.

답변

38

표준 응용 프로그램 로그에 쓸 때 이미 "myApp"소스를 사용했을 가능성이 있습니까? 그래서 MSDN에 따라 경우 : 변경 사항을 적용하려면 소스가 이미 에 로그를 매핑 된 당신이 새 로그에 다시 매핑하는 경우

, 컴퓨터를 다시 시작해야합니다.

http://msdn.microsoft.com/en-us/library/2awhba7a.aspx

+1

이것은 기본적으로 내 문제였습니다. Windows 이벤트 로그는 컴퓨터를 다시 시작할 때까지 새로운 사용자 지정 로그에 처음 쓰는 경우 제대로 작동하지 않을 수 있다는 점에서 약간 짜증이납니다. 로그를 만들었지 만 컴퓨터를 다시 시작할 때까지 이벤트 뷰어에서 새 사용자 지정 로그와 응용 프로그램 로그에 메시지를 쓰고있었습니다. 그 후에 새 메시지가 새 사용자 정의 로그에 기록됩니다. 감사! – Jez

+0

디버깅 중 잠시 후 다시 시작했습니다. 그게 효과가 있었어! – jonas

+0

EventViewer를 다시 시작하면 내 경우 Win8에서 도움이되었습니다. – Legends

0

EventLog에서 소스를 설정 했습니까?

MSDN Article.

로그에 항목을 기록하려면 먼저 EventLog 구성 요소 인스턴스에 Source 속성을 설정해야합니다. 구성 요소가 항목을 쓸 때 시스템은 지정한 소스가 구성 요소가 쓰고있는 이벤트 로그에 등록되어 있는지 확인하고 필요한 경우 CreateEventSource를 호출합니다. 일반적으로 응용 프로그램을 설치하는 동안 새 이벤트 소스를 만듭니다. 이렇게하면 운영 체제에서 등록 된 이벤트 소스 목록과 해당 구성을 새로 고칠 수 있습니다. 운영 체제가 이벤트 소스 목록을 새로 고치지 않고 새 소스로 이벤트를 쓰려고 시도하면 쓰기 조작이 실패합니다. 설치 중에 소스를 만드는 것이 옵션이 아닌 경우 응용 프로그램 초기화 중에 첫 번째 쓰기 작업보다 먼저 소스를 만들도록하십시오. 이 방법을 선택하는 경우 초기화 코드가 컴퓨터에서 관리자 권한으로 실행되고 있는지 확인하십시오. 이러한 권한은 새 이벤트 소스를 만드는 데 필요합니다.

+0

EventLog의 인스턴스를 만드는 경우에만 적용됩니다. 정적 WriteEntry 메서드를 사용할 때 소스는 첫 번째 문자열 인수로 전달됩니다. – Jez

4

EventLog에서 Source 속성을 설정하는 것을 잊어 버렸을 수 있습니다.

그것은 다음과 비슷한 모습이 될 것입니다

 if(!EventLog.SourceExists("MySource")) 
     { 
      EventLog.CreateEventSource("MySource", "MyNewLog"); 
     } 

     EventLog myLog = new EventLog(); 
     myLog.Source = "MySource"; 

     myLog.WriteEntry("Writing to event log."); 

여기 참조를 위해 MSDN article입니다.

+0

다른 대답과 같은 실수. :-) 나는 EventLog의 인스턴스를 사용하지 않는다; 정적 WriteEntry 메서드를 사용하고 있으므로 적용되지 않습니다. – Jez

+1

@Jez 즉석에서 EventSource를 만들면 EventSource를 빌드하는 데 대기 시간이 있다는 것을 명심해야하므로 즉시 사용할 수 없게됩니다. 당신이 두 번 프로그램을 실행한다면 정확한 소스에 쓰기 시작합니까? – Joseph

5

(페이지 아래로 절반 방법에 대해) 난 그냥이 밖으로 나를 도울 수있는 약간의 코드를 작성했습니다. 내가 만난 다른 로그 문제에 등록 된 소스이며 수동으로 로그에서 소스를 제거해야합니다. 내가 무엇을하기로 결정했는지는 소스가 존재하는지 확인하는 것입니다. 올바른 로그에 링크되어 있는지 확인합니다. 소스가 삭제되지 않았 으면 소스가 존재하지 않거나 로그가 생성되지 않습니다. new .

protected const string EventLogName = "MyLog"; 

private static bool CheckSourceExists(string source) { 
    if (EventLog.SourceExists(source)) { 
    EventLog evLog = new EventLog {Source = source}; 
    if (evLog.Log != EventLogName) { 
     EventLog.DeleteEventSource(source); 
    } 
    } 

    if (!EventLog.SourceExists(source)) { 
    EventLog.CreateEventSource(source, EventLogName); 
    EventLog.WriteEntry(source, String.Format("Event Log Created '{0}'/'{1}'", EventLogName, source), EventLogEntryType.Information); 
    } 

    return EventLog.SourceExists(source); 
} 

public static void WriteEventToMyLog(string source, string text, EventLogEntryType type) {  
    if (CheckSourceExists(source)) {   
     EventLog.WriteEntry(source, text, type);   
    } 
} 

는 희망이 도움이 :) 당신은 다른 답변에서 모든 제안을 확인 한 경우

+0

그건 조금 CheckSourceExists 무거운 ... 그게 항상하고 있었다면 악몽이 될 것입니다. 실행 시작시 한 번 확인하고 그 상태로 두지 않으시겠습니까? – CokoBWare

+0

네가 바로 거기에있다. 나는 이것을 사이트 유틸리티 당 한 번 더 실행 된 것으로 다시 생각해 냈다. 소스를 생성하기위한 관리자 권한 (또는 특정 이벤트 로그 권한)에 대한 요구 사항 또한 동기였습니다. – PJUK

0

는 다음 파일로 운영 체제 저장을 MSDN

에서 이벤트 로그를 다음

읽기 . EventLogInstaller 또는 CreateEventSource를 사용하여 새 이벤트 로그를 만들면 관련 파일이 지정된 컴퓨터의 % SystemRoot % \ System32 \ Config 디렉터리에 저장됩니다. 파일 이름은 ".evt"파일 이름 확장명을 가진 Log 속성의 처음 8자를 추가하여 설정됩니다.

처음 8 자의이 고유해야합니다.

0

기본적으로 가장 간단한 해결책은 비주얼 스튜디오를 닫고 관리자 모드로 실행해야한다는 것입니다. 그런 다음이 오류를 해결할 수 있습니다.

관련 문제