프로그래밍/C#, .NET

[.NET WinForm] 윈폼(WinForm)으로 해보는 종속성 주입 없이 사용하는 기본 로거(Logger)

당근천국 2023. 11. 21. 15:30

윈폼(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의 내용만 가지고는 파악이 잘 안된다는 게 문제긴 합니다 ㅎㅎㅎㅎ

뭐 그것도 없는 플랫폼이 대부분이라 이 정도면 잘돼 있는거긴 하지만 말이죠.