윈폼(WinForm)은 종속성 구현이 안 돼 있으므로 굳이 일부로 구현해 가며 로거를 쓰는 것은 너무 번거롭습니다.
그래서 이 포스팅은 종속성 없이 사용하는 방법을 다룹니다.
자세한 설정방법은 이전 포스팅을 확인해 주세요
이 플랫폼에는 기본 로거가 설치되어있지 않으므로 누겟에서 찾아서 설치해 줍니다.
Microsoft.Extensions.Hosting
간단하게 로거팩토리(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(); }
로거에 직접 접근하여 사용하면 됩니다.
GlobalStatic.LoggerFactory_My! .CreateLogger("Form1") .LogInformation("btnLog_Info 클릭!");
파일 출력을 안 하는 동안은 콘솔로 확인해야 하는데 WinForm은 콘솔이 열리지 않습니다.
프로젝트 속성 > 애플리케이션 > 출력 유형
을 '콘솔 애플리케이션'으로 설정하면 콘솔이 같이 열립니다.
파일로 출력하는 것은 다른 포스팅에서 다루었으므로 여기서는 동작 확인만 합니다.
(참고 : [.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의 내용만 가지고는 파악이 잘 안된다는 게 문제긴 합니다 ㅎㅎㅎㅎ
뭐 그것도 없는 플랫폼이 대부분이라 이 정도면 잘돼 있는거긴 하지만 말이죠.