C#에서 이벤트 로그 애플리케이션에 쓰기

Luqman Khan 2023년10월12일
  1. C#의 이벤트 로그 애플리케이션에 쓰기
  2. C#에서 이벤트 로그 애플리케이션에 항목을 쓰는 방법
C#에서 이벤트 로그 애플리케이션에 쓰기

Windows 이벤트 로그는 Windows 운영 체제에서 저장하는 시스템, 보안 및 응용 프로그램 알림에 대한 완전한 기록입니다. 관리자는 이를 사용하여 시스템 문제를 감지 및 진단하고 향후 문제에 대해 경고합니다.

C#의 이벤트 로그 애플리케이션에 쓰기

먼저 이벤트 로그에 쓸 수 있는지 확인합니다. 이를 위해 다음 코드를 사용할 수 있습니다.

통사론:

using (EventLog neweventLog = new EventLog("Application"))
{
    neweventLog.Source = "Application";
    neweventLog.WriteEntry("event Log message example", EventLogEntryType.Information, 102, 1);
}

이제 위 구문의 모든 부분을 설명하겠습니다.

  1. EventLog: Windows 이벤트 로그는 관리자가 쉽게 액세스할 수 있기 때문에 응용 프로그램의 오류 또는 주요 이벤트를 기록하는 데 사용됩니다. Windows 이벤트 로그는 유사한 콘솔에서 관리할 수 있습니다.
  2. neweventLog.Source: eventlog 키의 위 이벤트 소스에서 각 로그에는 이벤트 소스라는 하위 키가 포함되어 있습니다. 즉, 이벤트를 기록하는 소프트웨어의 이름을 이벤트 소스라고 합니다. 응용 프로그램의 이름이거나 응용 프로그램의 하위 구성 요소 이름일 수 있습니다.

C#에서 이벤트 로그 애플리케이션에 항목을 쓰는 방법

이벤트 로그 항목을 작성하려면 EventLog 클래스의 다음 메서드를 사용할 수 있습니다.

  1. WriteEntry() 메소드
  2. WriteEvent() 메서드

WriteEntry() 메서드

WriteEntry()에는 정적 메서드의 source 매개변수가 필요합니다. EventLog 클래스의 생성자를 사용하여 ‘소스’를 할당할 수도 있습니다.

첫 번째는 로그 이름이고 로컬 시스템과 이벤트 소스 이름은 생성자에서 정의됩니다.

다음에 기록되는 세 가지 이벤트 로그 항목이 있습니다.

  1. message: WriteEntry() 메서드의 첫 번째 매개변수입니다.
  2. EventLogEntryType: EventLogEntryType으로 이벤트 로그 항목을 정의할 수 있습니다. 이벤트 뷰어에는 정보, 경고, SuecessAudit 감사 오류 및 FailureAudit의 유형에 따라 다른 아이콘이 있습니다.
  3. 이벤트 ID: 애플리케이션이 사용할 수 있는 애플리케이션별 이벤트 ID를 지정할 수 있습니다. 애플리케이션별 바이너리 데이터와 범주를 추가로 전달할 수도 있습니다.

작성하기 위해 항상 새 이벤트 소스를 생성할 필요는 없습니다. 이벤트 로그와 동일한 이름의 기존 로그로 작성할 수 있습니다.

C#에서 Windows 이벤트 로그로 프로그래밍 방식으로 작업하는 방법을 살펴보겠습니다. 존재하지 않는 경우 아래 코드에서 소스를 만들 수 있습니다.

예제 코드:

private string CreateEventSource(string mynewAppName) {
  string eventSource = mynewAppName;
  bool sourceExists;
  try {
    sourceExists = EventLog.SourceExists(eventSource);
    if (!sourceExists) {
      EventLog.CreateEventSource(eventSource, "Application");
    }
  } catch (SecurityException) {
    eventSource = "Application";
  }

  return eventSource;
}

이제 위 예제 코드의 일부를 설명하겠습니다.

  1. sourceExists: 이 검색을 사용하면 소스가 존재하지 않는 경우에만 보안 예외가 발생합니다.
  2. mynewAppName: mynewAppName으로 소스를 호출할 수 있습니다.

오류가 발생한 경우 사용자는 보안을 위해 관리자 권한이 필요합니다. 매우 간단합니다. .NET 프레임워크 System.Diagnostics.EventLog 클래스만 사용해야 합니다.

먼저 WriteEntry() 메서드에서 System.Diagnostics.EventLog 클래스의 인스턴스를 만듭니다. 그런 다음 EventLog.SourceExists 메서드를 사용하여 이벤트 소스 system이 존재하는지 확인합니다.

존재하지 않는 경우 시스템 EventLog 아래에 생성합니다. 기록된 이벤트는 System EventLog 아래에 표시되며 이벤트 소스는 system으로 표시됩니다.

예제 코드:

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace neweventlogg {
  internal class Program {
    static void Main(string[] args) {
      using (EventLog neweventLog = new EventLog("Application")) {
        neweventLog.Source = "Application";
        neweventLog.WriteEntry("event Log message example", EventLogEntryType.Information, 102, 1);
      }
    }
  }
}

위의 코드에서 클래스 로거가 생성됩니다. 그러면 EventLog가 생성됩니다. EventLog가 이미 존재하는 경우 문자열 메시지가 저장됩니다. 그렇지 않으면 새 이벤트 소스가 생성됩니다.

WriteEvent() WriteEntry() 메서드를 사용하여 이벤트 로그에 이벤트를 기록할 수 있습니다. 그러나 경우에 따라 보안상의 이유로 이벤트 로그 응용 프로그램에 쓰기 위해 특별한 권한이 필요합니다.

관련 문장 - Csharp Event