20220914 Dotnet Windows Logging

.net 개발 로깅

닷넷은 어떻게 로깅하여야 할까

1. 윈도우 이벤트로그에 로깅

애플리케이션의 로그를 윈도우의 이벤트로그(EventLog)로 던지는 방법. 이렇게 쌓은 로그는 IIS가 돌아가는 서버의 이벤트 뷰어에서 확인할 수 있다.

사용 방법

이벤트 소스 등록과 실제 로그 쓰기 두 단계로 나눌 수 있다. 1) 소스 등록 : 이 이벤트로그를 누가 썼는지 식별하는 구분자를 OS에 등록. 소스 이름은 애플리케이션명 등으로 등록한다. 소스 이름을 이용하여 이미 등록된 식별자인지 판단이 가능하며, 서버마다 1회씩만 등록하면 된다. 2) 로그 쓰기 : 애플리케이션에서 발생하는 로그를 실제로 쌓는다. 다른 로그들과 같이 레벨 등을 설정가능하며(info/error...) 미리 등록된 소스 이름을 함께 사용한다.

예제

이벤트뷰어 스크린샷

using System;
using System.Diagnostics;
...
// 1. 이벤트 소스 생성. 이벤트 소스가 없으면 신규생성한다.
string sourceName = "MyApp"; //이벤트 뷰어의 "원본"에 적히는 문구. 위 이미지의 붉은색 박스
if(!EventLog.SourceExists(sourceName))
{
//이벤없으면 신규 생성한다.
//OS에 종속적이므로, 프로그램이 해당 서버에서 한번 실행되면 이 로직을 두번 타지는 않는다.
string logName = "Application";//로그 이름. 이벤트 뷰어>Windows 로그>응용 프로그램 아래에서 로그를 보고 싶으면 해당 부분을 Application으로 고정한다.
EventLog.CreateEventSource(sourceNAme, logName);
}
// 2. 로그 쓰기
EventLog myLog = new EventLog();
myLog.Source = sourceName;
myLog.WriteEntry("정보! 이벤트 로그를 남긴다.", EventLogEntryType.Information);
myLog.WriteEntry("경고! 이렇게 한번 더 남긴다!", EventLogEntryType.Warning);
/*
EventLogEntryType :
https://docs.microsoft.com/ko-kr/dotnet/api/system.diagnostics.eventlogentrytype?view=dotnet-plat-ext-6.0
*/

dotnet core

.net core의 경우 System.Diagnostics사용이 불가하며, EventLog를 사용하기 위하여 별도의 nuget 패키지를 설치하여야 한다.

Install-Package Microsoft.Extensions.Logging.EventLog

참조

EventLog