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
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은 색깔 구분이 없음

색깔있는 콘솔출력 참고자료
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 : 로그파일 크기 제한
파일로그예

파일타겟 참고자료
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의 예외로그예

'programming' 카테고리의 다른 글
ILogger의 구현체로 Serilog를 사용하기 (0) | 2024.10.01 |
---|---|
ILogger의 구현체로 log4net을 사용하기 (1) | 2024.10.01 |
같은 이벤트에 대한 View와 ViewModel의 메쏘드 호출 순서 (0) | 2024.09.27 |
안드로이드 개발 자료모음 (0) | 2022.02.01 |
GPIO - 버튼처리 (0) | 2020.08.08 |