방법: 서비스에 대한 정보 로깅
기본적으로 모든 Windows 서비스 프로젝트에는 응용 프로그램 이벤트 로그와 상호 작용하고 정보 및 예외를 이 이벤트 로그에 쓸 수 있는 기능이 있습니다. AutoLog 속성을 사용하면 응용 프로그램에서 이 기능을 사용할지 여부를 나타낼 수 있습니다. 기본적으로 Windows 서비스 프로젝트 템플릿을 사용하여 만든 모든 서비스에 대해 로깅이 설정됩니다. EventLog 클래스의 정적 폼을 사용하면 EventLog 구성 요소의 인스턴스를 만들거나 소스를 수동으로 등록하지 않고 로그에 서비스 정보를 쓸 수 있습니다.
로깅을 설정하면 서비스의 설치 관리자는 프로젝트의 각 서비스를 서비스가 설치된 컴퓨터의 응용 프로그램 로그에 자동으로 이벤트의 유효한 소스로 등록합니다. 서비스는 서비스가 시작, 중지, 일시 중지, 다시 시작, 설치 또는 제거될 때마다 정보를 기록합니다. 또한 서비스는 발생한 모든 오류를 기록합니다. 기본 동작을 사용할 경우 서비스가 이를 자동으로 처리하므로 로그에 엔트리를 쓰는 코드를 작성하지 않아도 됩니다.
응용 프로그램 로그 대신 이벤트 로그에 쓰려면 AutoLog 속성을 false로 설정하고 서비스 코드에 사용자 지정 이벤트 로그를 만든 다음 서비스를 이 로그에 대한 엔트리의 유효한 소스로 등록합니다. 관심있는 동작이 발생할 때마다 코드를 작성하여 로그에 엔트리를 기록해야 합니다.
참고
사용자 지정 이벤트 로그를 사용하고 서비스 응용 프로그램이 이 로그에 쓰도록 구성하는 경우 이벤트 로그에 액세스하기 전에 코드에서 서비스의 ServiceName 속성을 설정해야 합니다. 이벤트 로그에는 서비스를 이벤트의 유효한 소스로 등록하는 속성 값이 필요합니다.
서비스에 대한 기본 이벤트 로깅을 사용하려면
구성 요소의 AutoLog 속성을 true로 설정합니다.
참고
기본적으로 이 속성은 true로 설정되어 있습니다. 조건을 평가하고 조건의 결과에 따라 AutoLog 속성을 설정하는 것과 같이 복잡한 처리를 빌드하려는 경우에만 이 속성을 명시적으로 설정합니다.
서비스에 대한 이벤트 로깅을 사용하지 않으려면
구성 요소의 AutoLog 속성을 false로 설정합니다.
Me.AutoLog = False
this.AutoLog = false;
사용자 지정 로그에 로깅을 설정하려면
AutoLog 속성을 false로 설정합니다.
참고
사용자 지정 로그를 사용하려면 AutoLog 속성을 false로 설정해야 합니다.
Windows 서비스 응용 프로그램에서 EventLog 구성 요소의 인스턴스를 설정합니다.
CreateEventSource 메서드를 호출하고 소스 문자열과 만들 로그 파일 이름을 지정하여 사용자 지정 로그를 만듭니다.
EventLog 구성 요소 인스턴스에서 WriteEntry 메서드에 액세스하여 엔트리를 씁니다.
다음 코드에서는 사용자 지정 로그에 로깅을 설정하는 방법을 보여 줍니다.
참고
이 코드 예제에서 EventLog 구성 요소 인스턴스의 이름은 eventLog1로 지정됩니다(Visual Basic에서는 EventLog1). 2단계에서 다른 이름의 인스턴스를 만든 경우 코드를 적절하게 변경합니다.
Public Sub New() ' Turn off autologging Me.AutoLog = False ' Create a new event source and specify a log name that ' does not exist to create a custom log If Not System.Diagnostics.EventLog.SourceExists("MySource") Then System.Diagnostics.EventLog.CreateEventSource("MySource", "MyLog") End If ' Configure the event log instance to use this source name EventLog1.Source = "MySource" End Sub ... Protected Overrides Sub OnStart(ByVal args() As String) ' Write an entry to the log you've created. EventLog1.WriteEntry("In Onstart.") End Sub
public UserService2() { // Turn off autologging this.AutoLog = false; // create an event source, specifying the name of a log that // does not currently exist to create a new, custom log if (!System.Diagnostics.EventLog.SourceExists("MySource")) { System.Diagnostics.EventLog.CreateEventSource( "MySource","MyLog"); } // configure the event log instance to use this source name eventLog1.Source = "MySource"; } ... protected override void OnStart(string[] args) { // write an entry to the log eventLog1.WriteEntry("In OnStart."); }