programming

ILogger의 구현체로 NLog를 사용하기

programmer j 2024. 10. 2. 01:38

NLogExample.zip
0.01MB

 

Microsoft.Extensions.Logging.ILogger의 구현체로 NLog를 사용해서 로깅하기

1. 프로젝트 구성

- Visual Studio 2022 Version 17.11.4

- Target framework : .NET 8.0

- NLogExample         

          NLogConsoleApp1

          CalcLib

          NLogWpfApp1

2. 필요한 nuget패키지

Microsoft.Extensions.Logging

Nlog

NLog.Extensions.Logging

NLog.Targets.Seq

3. NLog의 출력을 Seq서버에 저장할 경우 필요한 프로그램

- Seq :https://datalust.co/download

- Seq설치방법 참고자료

  https://forum.dotnetdev.kr/t/log-viewer-feat-serilog/9492

  https://kjun.kr/1355

4. NLog를 이용해 Microsoft.Extensions.Logging.ILogger만들기

				:
// NLog 설정 파일 로드
LogManager.Setup().LoadConfigurationFromFile("NLogSetting.config");

// ILoggerFactory 생성
using ILoggerFactory loggerFactory = LoggerFactory.Create(builder =>
{
    builder.AddNLog();  // NLog를 ILogger 구현체로 추가
});

// Microsoft.Extensions.Logging.ILogger 인스턴스 생성
Microsoft.Extensions.Logging.ILogger logger = loggerFactory.CreateLogger<Program>();
				:

5. NLog 설정파일의 로그출력 패턴 예

5.1 Console target설정값

<target name="console" xsi:type="ColoredConsole"

layout="${longdate} [${level:format=TriLetter:uppercase=true}] ${threadid} ${callsite:includeNamespace=false} - ${message} ${exception}" />

 

layout : 로그메시지 형식

${longdate} : 날짜 시간정보

${level:format=TriLetter:uppercase=true} : 로그레벨정보(3글자)

${threadid} : 쓰레드ID

${callsite:includeNamespace=false} : 로그출력 메쏘드가 호출된 클래스이름과 메쏘드이름

${message} : 로그메시지

${exception} : 예외가 있을 경우 예외정보

 

Console로그예

- log4net은 색깔 구분이 없음

Console로그출력

색깔있는 콘솔출력 참고자료

https://blog.elmah.io/nlog-tutorial-the-essential-guide-for-logging-from-csharp/

 

3글자 로그레벨 참고자료

https://github.com/NLog/NLog/wiki/Level-Layout-Renderer

 

네임스페이스없이 클래스이름만 출력하는 방법 참고자료

https://github.com/NLog/NLog/wiki/Callsite-Layout-Renderer

 

5.2 File target설정값

<target name="file" xsi:type="File"

fileName="log/app.log"

maxArchiveFiles="5"

archiveAboveSize="1024"

layout="${longdate} [${level:format=TriLetter:uppercase=true}] ${threadid} ${callsite:includeNamespace=false} - ${message} ${exception:format=tostring}" />

 

fileName : 로그파일 이름

maxArchiveFiles : 로그파일 개수 제한

archiveAboveSize : 로그파일 크기 제한

 

파일로그예

File로그출력

파일타겟 참고자료

https://github.com/NLog/NLog/wiki/File-target

 

5.3 Seq target설정값

<target name="seq" xsi:type="Seq"

        serverUrl="http://localhost:5341">

  <property name="ThreadId" value="${threadid}" as="number" />

  <property name="Caller" value="${callsite:includeNamespace=false}" />

</target>

 

serverUrl : Seq서버 주소

 

Seq로그예

Seq로그예1

Seq의 예외로그예

Seq로그예2