[.NET WinForm] 윈폼(WinForm)으로 해보는 종속성 주입 없이 사용하는 기본 로거(Logger)
윈폼(WinForm)은 종속성 구현이 안 돼 있으므로 굳이 일부로 구현해 가며 로거를 쓰는 것은 너무 번거롭습니다.
그래서 이 포스팅은 종속성 없이 사용하는 방법을 다룹니다.
자세한 설정방법은 이전 포스팅을 확인해 주세요
0. 라이브러리 설치
이 플랫폼에는 기본 로거가 설치되어있지 않으므로 누겟에서 찾아서 설치해 줍니다.
Microsoft.Extensions.Hosting
1. 로거팩토리(LoggerFactory) 생성
간단하게 로거팩토리(LoggerFactory)를 생성하여 사용하는 것이 좋습니다.
전역에서 접근할 수 있도록 스태틱(static)으로 선언한 로거팩토리(LoggerFactory)변수를 만들어 줍니다.
/// <summary>
/// 로거 팩토리
/// </summary>
public static ILoggerFactory? LoggerFactory_My { get; set; }
이제 프로그램의 진입점 인
1) Program.cs의 Main() 이나
2) 메인폼(디폴트 : Form1)의 생성자에서
로거팩토리(LoggerFactory)를 생성해 줍니다.
(이 프로젝트에서는 Form1에서 생성함)
public Form1()
{
GlobalStatic.LoggerFactory_My
= LoggerFactory.Create(loggingBuilder =>
{
//콘솔 사용시 표시 옵션
loggingBuilder.AddSimpleConsole(x => x.TimestampFormat = "[yyyy-MM-dd HH:mm:ss] ");
loggingBuilder.AddFilter((provider, category, logLevel) =>
{
return true;
});
});
InitializeComponent();
}
2. 로거 사용
로거에 직접 접근하여 사용하면 됩니다.
GlobalStatic.LoggerFactory_My!
.CreateLogger("Form1")
.LogInformation("btnLog_Info 클릭!");
콘솔 표시
파일 출력을 안 하는 동안은 콘솔로 확인해야 하는데 WinForm은 콘솔이 열리지 않습니다.
프로젝트 속성 > 애플리케이션 > 출력 유형
을 '콘솔 애플리케이션'으로 설정하면 콘솔이 같이 열립니다.
3. 파일 출력
파일로 출력하는 것은 다른 포스팅에서 다루었으므로 여기서는 동작 확인만 합니다.
(참고 : [.NET Core] 기본 로거(Logger)를 파일로 출력하기 .faet NReco.Logging.File )
GlobalStatic.LoggerFactory_My
= LoggerFactory.Create(loggingBuilder =>
{
... 중략 ...
//파일 출력
loggingBuilder.AddFile("Logs/Log_{0:yyyy}-{0:MM}-{0:dd}.log"
, fileLoggerOpts =>
{
//파일 출력 이름
fileLoggerOpts.FormatLogFileName = sNameFormat =>
{
return String.Format(sNameFormat, DateTime.Now);
};
});
});
마무리
윈폼에서도 간단하게 기본 로거를 쓸 수 있습니다.
이 간단한 게 MSDN의 내용만 가지고는 파악이 잘 안된다는 게 문제긴 합니다 ㅎㅎㅎㅎ
뭐 그것도 없는 플랫폼이 대부분이라 이 정도면 잘돼 있는거긴 하지만 말이죠.