Please Enable JavaScript!
Gon[ Enable JavaScript ]

C# 을 이용해 Windows Event Log 쓰기

기타 언어/C# & MFC
반응형

Window Event log 는 어플리케이션 에러나 중요한 이벤트를 저장할 장소로 아주 좋은곳이다.

왜냐하면 모든 윈도우 이벤트는 같은 콘솔에서 쉽게 조회할수 있기때문이다.

이것은 프로그램을 관리하는데 아주 편리한 이점이 있다. 왜냐하면 여러프로그램이 돌아가고있는

서버에서 각 프로그램마다 로그를 확인하기 위해 여러 창을 열어 관리해야되는 불편함을

없애주기 때문이다.

그리고 특정 어플리케이션이 로그양이 많아 따로 관리하고자 한다면 로그저장소를 따로 만들어서

관리할 수 있는 기능을 제공해준다.

 

아래 소스는 어떻게 이벤트 로그를 윈도우에 저장하는지 보여주고 있다.

static void Main(string[] args)
{
    WriteEventLogEntry("This is an entry in the event log by daveoncsharp.com");
}

private static void WriteEventLogEntry(string message)
{
    // Create an instance of EventLog
    System.Diagnostics.EventLog eventLog = new System.Diagnostics.EventLog();

    // Check if the event source exists. If not create it.
    if (!System.Diagnostics.EventLog.SourceExists("TestApplication"))
    {
        System.Diagnostics.EventLog.CreateEventSource("TestApplication", "Application");
    }

    // Set the source name for writing log entries.
    eventLog.Source = "TestApplication";

    // Create an event ID to add to the event log
    int eventID = 8;

    // Write an entry to the event log.
    eventLog.WriteEntry(message,
                        System.Diagnostics.EventLogEntryType.Error,
                        eventID);

    // Close the Event Log
    eventLog.Close();
} 


WriteEventLogEntry 함수에서 System.Diagnostics.EventLog 클래스 객체를 생성한다.

EventLog.SourceExists 함수로 TestApplication 이벤트 소스가 레지스틀에 존재하는지에

대한 여부를 체크한다. 만약 레지스트리에 등록되어있지 않다면 Application 이벤트 로그아래에

event source 생성하게 된다.

 

다음은 소스 이름을 셋팅한후 이벤트 아이디를 생성한다. 이 이벤트 아이디는 단지 이벤트

로그에 보여줄 숫자값이다. 이것은 개발자가 어플리케이션 이벤트를 추적하기 위해서 허용하는

것이다. 예를 들어 접속실패는 2, 파일을 찾지못한 에러일 때 3, 파일이 잠겼을 때 등을

번호로 붙여 관리하는것이다. 그렇게 해놓으면 숫자만 보고도 쉽게 어떤 에러인지 파악할수

있게 되는것이다.

 

마지막으로 상세메시지를 입력하고 WriteEntry 를 호출하면된다.

실행한 내용을 확인하기 위해서는 제어판 > 이벤트 뷰어 콘솔에서 할수 있다.

위에서 제시된 예제를 실행하게 되면 윈도우에서 기본적으로 제공하고 있는 Application

(응용프로그램) 란에 이벤트 로그가 쌓이게 된다.

System.Diagnostics.EventLog.CreateEventSource(“Application hang”, “MyLog”);

처럼 두번째 파라미터에 Application 대신 MyLog 를 넣게 되면 새로운 범주가 생기게 되고

첫번째 파라미터에는 기존에 존재하는 event source 외에 새로운 것을 넣어 실행한다.

위에서 말했듯이 로그량이 많아 따로 관리하기를 원한다면 이런식으로 소스를 적용하면된다.

반응형
Posted by 녹두장군1
,