카테고리 없음

.NET MVC] 윈도우 이벤트 로그 사용하기

James Wetzel 2015. 4. 8. 19:09

클래스]

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Diagnostics;


namespace TOTO_OUTDOOR.Common.Util

{

    public static class WindowsLog

    {

        /// <summary>

        /// 로그를 기록한다.

        /// </summary>

        public static void Write(string sourceName, string logName, string message, System.Diagnostics.EventLogEntryType eventType, int eventID)

        {

            EventLog log = new EventLog(logName);

            try

            {

                log.Source = sourceName;

                log.WriteEntry(message, eventType, eventID);

            }

            catch (Exception ex) { }

            finally

            {

                log.Close();

                log.Dispose();

                log = null;

            }

        }


        /// <summary>

        /// 윈도우 로그 파일을 생성한다.

        /// </summary>

        public static void Create(string sourceName, string logName)

        {

            try

            {

                if (!EventLog.SourceExists(sourceName))

                {

                    EventLog.CreateEventSource(sourceName, logName);

                }

            }

            catch (Exception ex) { }

        }

    }

}


호츨]

WindowsLog.Create("www.jangjeonghun.com", "jangjeonghun.com");

WindowsLog.Write("www.jangjeonghun.com", "jangjeonghun.com", "추가 메세지", EventLogEntryType.Information, 4666);


중요 사항]

이벤트 로그는 레지스트리에서 관리된다.

웹은 서버의 레지스트리를 변경할 권한이 없으므로 "EventLog.CreateEventSource(sourceName, logName)" 실행 시점에서 에러가 발생할 것이다.


해결 방법]

방법 1] 레지스트리에 키를 생성한다.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\Security  마우스 우클릭 -> 사용 권한 -> "NETWORK SERVICE" 그룹 추가 ->모든 권한 부여 -> 저장









현상]

jangjeonghun 원본에서 이벤트 ID 0에 대한 설명을 찾을 수 없습니다. 이 이벤트를 발생시킨 구성 요소가 로컬 컴퓨터에 설치되어 있지 않거나 설치가 손상되었습니다. 로컬 컴퓨터에서 구성 요소를 설치 또는 복구할 수 있습니다.

이벤트가 다른 컴퓨터에서 시작된 경우 표시 정보를 이벤트와 함께 저장해야 합니다.

다음 정보가 이벤트와 함께 포함되었습니다.

windows event log test2222....

메시지 리소스가 있지만 문자열/메시지 테이블에서 메시지를 찾을 수 없습니다


원인]

이런 현상이 발생하는 이유는 위의 RegisterEventSource 에서 사용된 이벤트 명이 이벤트 소스로 제대로 등록되어 있지 

않기 때문에 발생한다.


해결 방법]

레지스트리에서 로그파일 정보 삭제

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\로그파일 이름


물리적 로그 파일 삭제

C:\Windows\System32\winevt\Logs\로그파일 이름

간혹 다른 프로세서가 로그 파일을(*.evtx)  잡고 있어 삭제하지 못한다는 메세지를 보게 되는대 이럴때는 unloker 프로그램을 이용해서 연결된 프로세서를 중지한 후 삭제하면 된다.


현상]

핸들이 잘못되었습니다.


원인]

레지스트리에는 logName이 존재하나 실제 물리적 파일이 없는 경우


해결 방법]

레지스트리에서 logName을 삭제하고 물리적 파일부터 다시 만든다.



***** 중요 사항 *****

1. 프로그래밍 방식으로 로그 파일을 생성한 경우 "이벤트 뷰어" 응용 프로그램을 다시 시작해야 목록에 나온다.

2. 이미 존재하는 로그 파일을 삭제하고(레지스터, 물리적 파일 등) 똑같은 이름으로 다시 만들었을 경우 정상 동작이 되지 않을 수 있는대 이럴 경우 OS를 재시작해보기 바란다.



728x90
반응형