C #에서 Windows 이벤트 로그에 데이터를 기록하는 방법

Windows 운영 체제는 문제가 발생할 때마다 Windows 이벤트 로그에 데이터를 기록합니다. Windows 이벤트 뷰어 도구를 사용하여이 데이터를 볼 수 있습니다. 이 문서에서는 C #에서 Windows 이벤트 로그를 프로그래밍 방식으로 사용하는 방법에 대해 설명합니다.

이 문서에 제공된 코드 예제를 사용하려면 시스템에 Visual Studio 2019가 설치되어 있어야합니다. 아직 복사본이없는 경우 여기에서 Visual Studio 2019를 다운로드 할 수 있습니다.

Visual Studio에서 .NET Core 콘솔 애플리케이션 프로젝트 만들기

먼저 Visual Studio에서 .NET Core 콘솔 애플리케이션 프로젝트를 만들어 보겠습니다. Visual Studio 2019가 시스템에 설치되어 있다고 가정하고 아래에 설명 된 단계에 따라 Visual Studio에서 새 .NET Core 콘솔 애플리케이션 프로젝트를 만듭니다.

  1. Visual Studio IDE를 시작합니다.
  2. "새 프로젝트 만들기"를 클릭합니다.
  3. "새 프로젝트 만들기"창의 표시된 템플릿 목록에서 "콘솔 앱 (.NET Core)"을 선택합니다.
  4. 다음을 클릭하십시오.
  5. 다음에 표시된 "새 프로젝트 구성"창에서 새 프로젝트의 이름과 위치를 지정합니다.
  6. 생성을 클릭합니다.

그러면 Visual Studio 2019에서 새로운 .NET Core 콘솔 애플리케이션 프로젝트가 생성됩니다.이 문서의 후속 섹션에서이 프로젝트를 사용하여 Windows 이벤트 로그로 작업합니다.

EventLog NuGet 패키지 설치

.NET Core 애플리케이션에서 Windows 이벤트 로그를 사용하려면 NuGet에서 Microsoft.Extensions.Logging.EventLog 패키지를 설치해야합니다. Visual Studio 2019 IDE 내의 NuGet 패키지 관리자를 통해 또는 NuGet 패키지 관리자 콘솔에서 다음 명령을 실행하여이 작업을 수행 할 수 있습니다.

설치 패키지 Microsoft.Extensions.Logging.EventLog

C #에서 EventLog 클래스의 인스턴스 만들기

EventLog 클래스의 인스턴스를 만들고 Windows 이벤트 로그에 항목을 작성하려면 다음 코드를 사용할 수 있습니다.

EventLog eventLog = new EventLog ();

eventLog.Source = "MyEventLogTarget";

eventLog.WriteEntry ( "테스트 메시지입니다.", EventLogEntryType.Information);

C #에서 EventLog 인스턴스에 쓰기

애플리케이션에서이 EventLog 인스턴스에 데이터를 기록하려는 경우 다음 코드를 사용할 수 있습니다.

string message = "테스트 메시지입니다.";

(EventLog eventLog = new EventLog ( "Application")) 사용

{

    eventLog.Source = "응용 프로그램";

    eventLog.WriteEntry (message, EventLogEntryType.Information);

}

C #에서 EventLog 인스턴스 지우기

EventLog 인스턴스를 지우려면 다음 코드를 사용할 수 있습니다.

EventLog eventLog = new EventLog ();

eventLog.Source = "MyEventLogSource";

eventLog.Clear ();

다음 코드 스 니펫을 사용하여 이벤트 로그를 삭제할 수 있습니다.

if (EventLog.Exists ( "MyEventLogTarget"))

{

   EventLog.Delete ( "MyEventLogTarget");

}

C #에서 EventLog 항목 읽기

아래에 제공된 코드 스 니펫을 사용하여 모든 로그 항목을 읽을 수 있습니다.

EventLog eventLog = new EventLog ();

eventLog.Log = "MyEventLogTarget";

foreach (eventLog.Entries의 EventLogEntry 항목)

   // 여기에 사용자 정의 코드 작성

}

NLog를 사용하여 C #의 EventLog에 로그 데이터 쓰기

이제 NLog.WindowsEventLog 패키지를 활용하겠습니다. 이 패키지를 사용하면 .NET Core 환경에서 작업하는 동안 NLog를 사용하여 로그 데이터를 EventLog로 보낼 수 있습니다.

NLog.WindowsEventLog는 EventLog에 연결하고 ASP.NET Core에서 EventLog로 작업하는 복잡한 작업을 캡슐화합니다. 평소처럼 NLog 메서드를 호출하면됩니다.

NLog를 사용하여 EventLog에 데이터를 기록하므로 프로젝트에 다음 패키지를 추가합니다.

설치 패키지 NLog.WindowsEventLog

C #에서 로깅 인터페이스 만들기

로그를 정보, 경고, 디버그 또는 오류로 저장하려면 다음 인터페이스를 만듭니다.

공용 인터페이스 ILogManager

    {

        무효 LogInformation (문자열 메시지);

        무효 LogWarning (문자열 메시지);

        무효 LogDebug (문자열 메시지);

        void LogError (문자열 메시지);

    }

C #에서 NLogManager 클래스 구현

다음으로 ILogManager 인터페이스를 확장하고 각 메서드를 구현하는 NLogManager라는 클래스를 만듭니다.

공용 클래스 NLogManager : ILogManager

    {

        개인 정적 NLog.ILogger 로거 =

LogManager.GetCurrentClassLogger ();

        공개 무효 LogDebug (문자열 메시지)

        {

            새로운 NotImplementedException ();

        }

        공개 무효 LogError (문자열 메시지)

        {

            logger.Error (메시지);

        }

        공개 무효 LogInformation (문자열 메시지)

        {

            새로운 NotImplementedException ();

        }

        공개 무효 LogWarning (문자열 메시지)

        {

            새로운 NotImplementedException ();

        }

    }

C #에서 LogError 메서드 구현

단순성을 위해이 예제에서는 LogError 메서드를 사용하고 NLogManager 클래스의 다른 메서드는 구현하지 않습니다. 이제 NLog를 사용하여 EventLog에 데이터를 기록하는 방법을 이해하겠습니다. 아래와 같이 NLogManager 클래스의 LogError 메서드를 수정합니다.

공개 무효 LogError (문자열 메시지)

    {

        로거 로거 = LogManager.GetLogger ( "EventLogTarget");

        var logEventInfo = new LogEventInfo (LogLevel.Error,

        logger.Name, 메시지);

        logger.Log (logEventInfo);

    }

EventLogTarget은 구성 파일 nlog.config에 정의되어야하는 EventLog에 대한 로그 대상의 이름 일뿐입니다. LogEventInfo 클래스는 로그 이벤트입니다. 즉, 로그 이벤트를 나타냅니다. 생성자에게 로그 수준, 로거 이름 및 기록 할 메시지를 전달해야합니다.

C #의 EventLog에 데이터를 기록하도록 NLog 구성

NLog를 프로그래밍 방식으로 구성하여 EventLog에 데이터를 기록하려면 다음 코드를 사용할 수 있습니다.

var config = new NLog.Config.LoggingConfiguration ();

var logEventLog = new NLog.Targets.EventLogTarget ( "EventLogTarget");

config.AddRule (NLog.LogLevel.Info, NLog.LogLevel.Error, logEventLog);

NLog.LogManager.Configuration = 구성;

C #에서 완전한 NLogManager 예제

NLogManager 클래스의 전체 소스 코드는 참조 용으로 아래에 제공됩니다.

공용 클래스 NLogManager : ILogManager

    {

        개인 정적 NLog.ILogger 로거 =

LogManager.GetCurrentClassLogger ();

        공개 무효 LogDebug (문자열 메시지)

        {

            logger.Debug (메시지);

        }

공개 무효 LogError (문자열 메시지)

        {

로거 로거 = LogManager.GetLogger ( "EventLogTarget");

var logEventInfo = new LogEventInfo (LogLevel.Error,

logger.Name, 메시지);

logger.Log (logEventInfo);

        }

        공개 무효 LogInformation (문자열 메시지)

        {

            logger.Info (메시지);

        }

        공개 무효 LogWarning (문자열 메시지)

        {

            logger.Warn (메시지);

        }

    }

컨트롤러에서 NLogManager 인스턴스를 활용하려면 아래 제공된 코드 스 니펫에 표시된대로 ConfigureServices 메서드에 인스턴스를 추가해야합니다.

services.AddSingleton ();

Windows 이벤트 뷰어를 시작하면 아래 스크린 샷과 같이 여기에 기록 된 오류 메시지를 볼 수 있습니다.

Windows 이벤트 로그는 일반적으로 시스템 이벤트, 네트워크 트래픽 및 보안, 성능 등과 같은 관련 데이터를 기록하는 데 사용됩니다. Windows 이벤트 로그를 로그 대상으로 활용하여 응용 프로그램의 데이터를 저장할 수 있습니다. 응용 프로그램이 Windows에서만 실행되는 경우 Windows 이벤트 로그는 응용 프로그램의 이벤트 로그 데이터를 저장하는 좋은 옵션입니다.

C #에서 더 많은 작업을 수행하는 방법 :

  • C #에서 ArrayPool 및 MemoryPool을 사용하는 방법
  • C #에서 Buffer 클래스를 사용하는 방법
  • C #에서 HashSet을 사용하는 방법
  • C #에서 명명 및 선택적 매개 변수를 사용하는 방법
  • BenchmarkDotNet을 사용하여 C # 코드를 벤치마킹하는 방법
  • C #에서 유창한 인터페이스 및 메서드 체인을 사용하는 방법
  • C #에서 정적 메서드를 단위 테스트하는 방법
  • C #에서 God 개체를 리팩터링하는 방법
  • C #에서 ValueTask를 사용하는 방법
  • C에서 불변성을 사용하는 방법
  • C #에서 const, readonly 및 static을 사용하는 방법
  • C #에서 데이터 주석을 사용하는 방법
  • C # 8에서 GUID를 사용하는 방법
  • C #에서 추상 클래스와 인터페이스를 사용하는 경우
  • C #에서 AutoMapper를 사용하는 방법
  • C #에서 람다 식을 사용하는 방법
  • C #에서 Action, Func 및 Predicate 대리자를 사용하는 방법
  • C #에서 대리자를 사용하는 방법
  • C #에서 간단한 로거를 구현하는 방법
  • C #에서 특성을 사용하는 방법
  • C #에서 log4net으로 작업하는 방법
  • C #에서 리포지토리 디자인 패턴을 구현하는 방법
  • C #에서 리플렉션을 사용하는 방법
  • C #에서 filesystemwatcher로 작업하는 방법
  • C #에서 지연 초기화를 수행하는 방법
  • C #에서 MSMQ를 사용하는 방법
  • C #에서 확장 메서드를 사용하는 방법
  • C #에서 람다 식 사용 방법
  • C #에서 volatile 키워드를 사용하는 경우
  • C #에서 yield 키워드를 사용하는 방법
  • C #에서 다형성을 구현하는 방법
  • C #에서 자신 만의 작업 스케줄러를 빌드하는 방법
  • C #에서 RabbitMQ로 작업하는 방법
  • C #에서 튜플을 사용하는 방법
  • C #에서 가상 및 추상 메서드 탐색
  • C #에서 Dapper ORM을 사용하는 방법
  • C #에서 플라이 웨이트 디자인 패턴을 사용하는 방법