연습 : 이벤트 로그, 이벤트 소스 및 엔트리 살펴보기
업데이트: 2007년 11월
이 연습에서는 Visual Studio 응용 프로그램에서 사용되는 이벤트 로깅의 주요 특징에 대해 살펴봅니다. 이 연습을 통해 다음과 같은 작업 방법을 배웁니다.
EventLog 구성 요소를 만듭니다.
사용자 지정 이벤트 로그를 만들고 삭제하는 코드를 작성합니다.
다양한 형식의 엔트리를 사용자 지정 로그에 씁니다.
사용자 지정 로그에서 엔트리를 읽습니다.
로그와 이벤트 소스가 있는지 확인합니다.
로그 엔트리를 지웁니다.
서버 탐색기를 사용하여 이벤트 로그 동작의 결과를 확인합니다.
참고: |
---|
다음 지침처럼 컴퓨터에서 Visual Studio 사용자 인터페이스 요소 일부에 대한 이름이나 위치를 다르게 표시할 수 있습니다. 이러한 요소는 사용하는 Visual Studio 버전 및 설정에 따라 결정됩니다. 자세한 내용은 Visual Studio 설정을 참조하십시오. |
사용자 인터페이스 만들기
이 연습에서는 Windows 응용 프로그램을 만든 다음 이 응용 프로그램에서 일련의 컨트롤을 사용하여 일련의 이벤트 로깅 동작을 시작해 봅니다.
응용 프로그램을 위한 폼과 컨트롤을 만들려면
새 프로젝트 대화 상자에서 Visual Basic 또는 Visual C#Windows 응용 프로그램을 만든 다음 이름을 EventLogApp1로 지정합니다.
폼에 8개의 단추를 추가한 후 다음과 같이 속성을 설정합니다.
컨트롤
Text 속성
Name 속성
Button1
Create Custom Log
CreateLog
Button2
Delete Log
DeleteLog
Button3
Write Entry
WriteEntry
Button4
Clear Log
ClearLog
Button5
Verify Log Exists
VerifyLog
Button6
Verify Source Exists
VerifySource
Button7
Remove Event Source
RemoveSource
Button8
Read Entry
ReadEntry
계속해서 각 단추에 대해 다음과 같은 작업을 수행합니다.
디자이너에서 단추를 두 번 클릭하여 단추의 기본 이벤트 처리기를 만듭니다. 코드 편집기가 나타나고 단추의 Click 이벤트에 대한 스텁이 나타납니다.
디자인 뷰로 돌아가서 그 다음 단추를 두 번 클릭합니다.
이 작업을 반복하여 모든 단추의 기본 이벤트 처리기 스텁을 만듭니다.
도구 상자의 구성 요소 탭에서 EventLog 구성 요소를 폼으로 끌어 옵니다.
EventLog 구성 요소 인스턴스가 폼의 아래쪽에 있는 구성 요소 트레이 영역에 나타납니다.
사용자 지정 로그 만들기 및 삭제
이 단계에서는 SourceExists 메서드를 통해 현재 사용 중인 소스가 이미 있는지 확인한 다음 새로운 로그 이름을 사용하여 CreateEventSource 메서드를 호출합니다. 이 로그가 없기 때문에 이 코드를 실행하면 시스템에서 사용자 지정 로그가 생성됩니다.
사용자 지정 이벤트 로그를 만들려면
코드 편집기에서 CreateLog_Click 프로시저를 찾습니다.
다음과 같은 코드를 입력합니다. 이벤트 로그와 소스는 한 쌍으로 작성되며 소스는 이벤트 로그가 작성된 다음에 작성될 수 있습니다. 이벤트 로그가 만들어지면 EventLog 구성 요소는 새 이벤트 로그에 액세스하도록 구성됩니다.
' Source cannot already exist before creating the log. If EventLog.SourceExists("Source1") Then EventLog.DeleteEventSource("Source1") End If ' Logs and Sources are created as a pair. EventLog.CreateEventSource("Source1", "NewLog1") ' Associate the EventLog component with the new log. EventLog1.Log = "NewLog1" EventLog1.Source = "Source1"
// Source cannot already exist before creating the log. if (System.Diagnostics.EventLog.SourceExists("Source1")) { System.Diagnostics.EventLog.DeleteEventSource("Source1"); } // Logs and Sources are created as a pair. System.Diagnostics.EventLog.CreateEventSource("Source1", "NewLog1"); // Associate the EventLog component with the new log. eventLog1.Log = "NewLog1"; eventLog1.Source = "Source1";
보안 정보: 이벤트 로그를 만들 때는 해당 리소스가 이미 있는 경우 어떻게 처리할 것인지를 결정해야 합니다. 악의를 가진 다른 프로세스에서 이미 해당 이벤트 로그를 만들어 이에 대한 액세스 권한을 가지고 있을 수도 있습니다. 이 경우 이벤트 로그에 데이터를 쓰면 다른 프로세스에서 이 데이터를 사용할 수 있게 됩니다.
사용자 지정 로그를 삭제하려면
코드 편집기에서 DeleteLog_Click 프로시저를 찾습니다.
다음과 같은 코드를 입력합니다.
If EventLog.Exists("NewLog1") Then EventLog.Delete("NewLog1") End If
if (System.Diagnostics.EventLog.Exists("NewLog1")) { System.Diagnostics.EventLog.Delete("NewLog1"); }
로그에 엔트리 쓰기
이 단계에서는 이전에 생성한 EventLog 구성 요소 인스턴스를 사용하여 로그에 엔트리를 씁니다. 그렇게 하려면 구성 요소에서 방금 만든 소스 문자열을 사용하도록 구성합니다. 그런 다음 기록할 두 개의 엔트리, 즉 정보 이벤트와 오류 이벤트를 지정합니다.
로그에 엔트리를 쓰려면
코드 편집기에서 WriteEntry_Click 프로시저를 찾습니다.
다음과 같은 코드를 입력합니다. 이 코드에서는 오버로드된 WriteEntry 메서드를 사용하여 이벤트 로그에 씁니다. 두 번째로 표시되는 폼에서는 메시지 형식을 지정할 수 있습니다. 뒷부분에 있는 "코드 테스트" 단원에서 서버 탐색기를 사용하여 엔트리를 보는 경우 각 형식의 엔트리는 서로 다른 아이콘으로 구분됩니다.
EventLog1.WriteEntry("This is an informational message") EventLog1.WriteEntry("This is an error message", _ Diagnostics.EventLogEntryType.Error)
eventLog1.WriteEntry("This is an informational message"); eventLog1.WriteEntry("This is an error message", System.Diagnostics.EventLogEntryType.Error);
로그 엔트리 지우기
이 단계에서는 Clear 메서드를 사용하여 사용자 지정 로그에서 기존 엔트리를 제거합니다.
로그 엔트리를 지우려면
코드 편집기에서 ClearLog_Click 프로시저를 찾습니다.
EventLog 구성 요소 인스턴스에 Clear 메서드를 호출합니다.
EventLog1.Clear()
eventLog1.Clear();
로그와 소스 확인
이 절차에서는 사용자 지정 로그가 있는지 확인하는 프로시저와 소스 문자열이 존재하는지 확인하는 프로시저를 만듭니다. 이러한 두 프로시저는 프로젝트를 실행할 때 수행하는 다양한 동작의 결과를 테스트하는 데 사용됩니다.
사용자 지정 로그가 있는지 확인하려면
코드 편집기에서 VerifyLog_Click 프로시저를 찾습니다.
지정한 이벤트 로그가 있는지 여부를 평가하고 결과에 따라 true 또는 false를 표시하는 메시지 상자를 만듭니다. 아래와 같은 코드를 사용합니다.
Dim logExists As Boolean = EventLog.Exists("NewLog1") MessageBox.Show("Does the log exist? " & logExists.ToString())
bool logExists = System.Diagnostics.EventLog.Exists("NewLog1"); MessageBox.Show("Does the log exist? " + logExists.ToString());
소스가 있는지 확인하려면
코드 편집기에서 VerifySource_Click 프로시저를 찾습니다.
지정한 소스가 있는지 여부를 평가하고 결과에 따라 true 또는 false를 표시하는 메시지 상자를 만듭니다. 아래와 같은 코드를 사용합니다.
Dim sourceExists As Boolean = EventLog.SourceExists("Source1") MessageBox.Show("Does the source exist? " + sourceExists.ToString())
bool sourceExists = System.Diagnostics.EventLog.SourceExists("Source1"); MessageBox.Show("Does the source exist? " + sourceExists.ToString());
소스 제거
이 단계에서는 소스 문자열을 삭제하는 코드를 작성합니다. 이를 위해 먼저 해당 소스(Source1)가 있는지 확인한 다음 DeleteEventSource 메서드를 호출하여 이를 제거합니다.
작성한 이벤트 소스를 제거하려면
코드 편집기에서 RemoveSource_Click 프로시저를 찾습니다.
아래와 같은 코드를 추가합니다.
If EventLog.SourceExists("Source1") Then EventLog.DeleteEventSource("Source1") End If
if (System.Diagnostics.EventLog.SourceExists("Source1")) { System.Diagnostics.EventLog.DeleteEventSource("Source1"); }
엔트리 읽기
이 단계에서는 이벤트 로그의 엔트리 컬렉션을 순환하면서 로그에 있는 기존 메시지를 표시하는 코드를 작성합니다.
생성한 사용자 지정 로그에서 엔트리를 읽으려면
코드 편집기에서 ReadEntry_Click 프로시저를 찾습니다.
아래와 같은 코드를 추가합니다.
Dim entry As EventLogEntry If EventLog1.Entries.Count > 0 Then For Each entry In EventLog1.Entries System.Windows.Forms.MessageBox.Show(entry.Message) Next Else MessageBox.Show("There are no entries in the log.") End If
if (eventLog1.Entries.Count > 0) { foreach (System.Diagnostics.EventLogEntry entry in eventLog1.Entries) { MessageBox.Show(entry.Message); } } else { MessageBox.Show("There are no entries in the log."); }
코드 테스트
이 단원에서는 서버 탐색기를 사용하여 코드의 결과를 확인합니다.
서버 탐색기를 시작하려면
보기 메뉴에서 서버 탐색기에 액세스합니다.
현재 서버의 노드를 확장한 다음 그 아래의 이벤트 로그 노드를 확장합니다.
응용 프로그램을 빌드하고 실행하려면
파일을 저장한 다음 F5 키를 눌러서 프로젝트를 빌드하여 시작합니다. 앞에서 만든 8개의 단추가 포함된 폼이 표시됩니다.
Create Custom Log 단추를 클릭합니다.
참고: Windows 이벤트 로그를 만들려면 응용 프로그램이 실행되는 서버에 대한 적절한 권한이 있어야 합니다. 이 단계에서 보안 오류가 발생하면 시스템 관리자에게 문의하십시오.
실행 모드 상태에서 제품으로 돌아가 서버 탐색기에서 이벤트 로그 노드를 마우스 오른쪽 단추로 클릭합니다.
새로 고침을 클릭합니다.
이제 NewLog1 로그가 이벤트 로그 노드에 나타나는지 확인합니다.
사용자 지정 로그의 생성, 삭제 및 확인을 테스트하려면
실행 중인 폼으로 돌아가서 Verify Log Exists 단추를 클릭합니다.
텍스트가 "True"로 설정된 프롬프트가 나타납니다.
Delete Log 단추를 클릭한 다음 다시 Verify Log Exists 단추를 클릭합니다.
이번에는 프롬프트에 "False"가 표시됩니다.
Create Custom Log 단추를 다시 클릭하여 로그를 다시 만듭니다.
사용자 지정 로그에 엔트리 쓰기 및 읽기를 테스트하려면
폼에서 Write Entry 단추를 클릭합니다.
서버 탐색기에 액세스하여 NewLog1 로그를 확장합니다.
그 아래의 Source1 노드를 확장합니다.
두 개의 엔트리가 로그에 추가된 것을 알 수 있습니다. 하나의 엔트리에는 정보 엔트리임을 나타내는 아이콘이 표시되고, 다른 하나에는 오류임을 나타내는 아이콘이 표시됩니다.
폼으로 돌아가서 Read Entry 단추를 클릭합니다.
정보 엔트리와 오류 엔트리를 각각 포함하는 두 개의 프롬프트가 나타납니다.
참고: Write Entry 단추를 여러 번 클릭한 경우에는 더 많은 프롬프트가 표시됩니다.
로그 지우기를 테스트하려면
폼에서 로그 지우기 단추를 클릭합니다.
서버 탐색기에서 NewLog1 노드를 마우스 오른쪽 단추로 클릭한 다음 새로 고침을 클릭합니다.
로그에 엔트리가 남아 있지 않은 것을 알 수 있습니다.
소스 문자열 제거를 테스트하려면
폼에서 Remove Event Source 단추를 클릭합니다.
Verify Source Exists 단추를 클릭합니다. Source1 소스가 더 이상 존재하지 않음을 의미하는 "False"가 포함된 메시지가 표시됩니다.
Write Entry 단추를 클릭합니다.
참고: 그러면 WriteEntry 메서드에서 소스가 현재 없는 경우에 소스를 설정하므로 로그에 엔트리를 기록할 수 있습니다.
서버 탐색기에서 NewLog1 노드를 마우스 오른쪽 단추로 클릭한 다음 새로 고침을 클릭합니다. 로그에 두 개의 엔트리가 있는 것을 알 수 있습니다.
다시 Verify Source Exists 단추를 클릭합니다. Source1 소스가 있음을 의미하는 "True"가 포함된 메시지가 표시됩니다.
테스트를 하는 동안 선택에 따라 Delete Log 단추를 클릭할 수도 있습니다. 그러면 NewLog1 로그와 Source1 소스가 제거되고 시스템 구성에 대한 변경 내용이 영구화되지 않습니다.