Visual C++를 사용하여 이벤트 로그에 항목 쓰기

이 문서에서는 Microsoft .NET Framework 사용하여 운영 체제의 이벤트 로그에 사용자 고유의 항목을 추가하는 방법을 설명합니다.

원래 제품 버전: Visual C++
원본 KB 번호: 815661

요구 사항

Visual Studio .NET

이벤트 로그에 항목 쓰기

이벤트 로깅은 애플리케이션이 중요한 소프트웨어 및 하드웨어 이벤트를 기록할 수 있는 표준 중앙 집중식 방법을 제공합니다. Windows는 로그를 보기 위한 표준 사용자 인터페이스인 이벤트 뷰어 제공합니다. 공용 언어 런타임 EventLog 구성 요소를 사용하면 로컬 및 원격 컴퓨터 모두에서 기존 이벤트 로그에 쉽게 연결하고 이러한 로그에 항목을 쓸 수 있습니다. 기존 로그에서 항목을 읽고 사용자 지정 이벤트 로그를 만들 수도 있습니다. 가장 간단한 형식으로 이벤트 로그에 쓰기에는 샘플 애플리케이션을 만드는 몇 가지 단계가 포함됩니다.

이렇게 하려면 다음 단계를 따르세요.

  1. Visual Studio .NET을 시작합니다.

  2. 새 Visual C++ 관리형 C++ 애플리케이션 프로젝트를 만듭니다.

  3. 코드에 다음 줄을 추가하여 system.dll 대한 참조를 추가합니다.

    #using <system.dll>
    
  4. 코드의 using 뒷부분 System 에서 이러한 네임스페이스의 선언을 한정할 필요가 없도록 및 System::Diagnostics 네임스페이스에서 지시문을 사용합니다. 다른 선언 앞에 다음 문을 사용할 수 있습니다.

    using namespace System;
    using namespace System::Diagnostics;
    
  5. 이벤트 로그에 쓰려면 다음과 같은 몇 가지 정보가 있어야 합니다.

    • 메시지
    • 쓸 로그의 이름입니다(아직 없는 경우 생성됨).
    • 이벤트의 원본을 나타내는 문자열입니다.

    단일 이벤트 로그로만 특정 원본을 등록할 수 있습니다. 둘 이상의 로그에 메시지를 쓰려면 여러 원본을 정의해야 합니다.

    String^ sSource;
    String^ sLog;
    String^ sEvent;
    
    sSource = gcnew String("dotNET Sample App1");
    sLog = gcnew String("Application1");
    sEvent = gcnew String("Sample Event1");
    
  6. 클래스의 두 정적 메서드를 EventLog 사용하여 원본이 있는지 여부와 원본이 없는지 검사 특정 이벤트 로그와 연결된 이 소스를 만듭니다. 지정한 로그 이름이 없으면 첫 번째 항목을 로그에 쓸 때 이름이 자동으로 만들어집니다. 기본적으로 메서드에 로그 이름을 CreateEventSource 제공하지 않으면 로그 파일의 이름은 Application Log입니다.

    if(!EventLog::SourceExists(sSource)) EventLog::CreateEventSource(sSource,sLog);
    
  7. 이벤트 로그에 메시지를 쓰려면 정적 메서드 EventLog.WriteEntry를 사용할 수 있습니다. 이 메서드에는 여러 가지 오버로드된 버전이 있습니다. 다음 샘플 코드는 가장 간단한 메서드(원본 문자열 및 메시지를 사용함)와 더 복잡한 메서드 중 하나(이벤트 ID 및 이벤트 형식 지정 지원)를 보여 줍니다.

    EventLog::WriteEntry(sSource,sEvent);
    EventLog::WriteEntry(sSource, sEvent, EventLogEntryType::Warning, 235);
    
  8. 애플리케이션을 저장합니다. 애플리케이션을 실행한 다음 이벤트 뷰어 애플리케이션 로그인을 검사 새 이벤트를 확인합니다.

Visual C++ .NET의 전체 코드 목록

#include <tchar.h>
#using <system.dll>
#using <mscorlib.dll>

using namespace System;
using namespace System::Diagnostics;

int _tmain()
{
    String^ sSource;
    String^ sLog;
    String^ sEvent;

    sSource = gcnew String("dotNET Sample App1");
    sLog = gcnew String("Application1");
    sEvent = gcnew String("Sample Event1");

     if(!EventLog::SourceExists(sSource))
       EventLog::CreateEventSource(sSource,sLog);

    EventLog::WriteEntry(sSource,sEvent);
    EventLog::WriteEntry(sSource, sEvent,
    EventLogEntryType::Warning, 234);
    return 0;
}