Microsoft.Extensions.Logging.ILogger의 구현체로 Serilog를 사용해서 로깅하기
1. 프로젝트 구성
- Visual Studio 2022 Version 17.11.4
SerilogExConsoleApp1
CalcLib
SerilogWpfApp1
2. 필요한 nuget패키지
Microsoft.Extensions.Configuration
Microsoft.Extensions.Configuration.FileExtensions
Microsoft.Extensions.Configuration.Json
Microsoft.Extensions.Logging
Serilog
Serilog.Enrichers.CallerInfo
Serilog.Enrichers.Environment
Serilog.Enrichers.Thread
Serilog.Extensions.Logging
Serilog.Settings.Configuration
Serilog.Sinks.Console
Serilog.Sinks.File
Serilog.Sinks.Seq
3. Serilog의 출력을 Seq서버에 저장할 경우 필요한 프로그램
- Seq :https://datalust.co/download
- Seq설치방법 참고자료
https://forum.dotnetdev.kr/t/log-viewer-feat-serilog/9492
4. Serilog를 이용해 Microsoft.Extensions.Logging.ILogger만들기
:
// 1. Serilog LoggerConfiguration 설정
var configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("SerilogSetting.json")
.Build();
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(configuration)
.CreateLogger();
// 2. LoggerFactory 생성 및 Serilog 추가
using var loggerFactory = LoggerFactory.Create(builder =>
{
builder.AddSerilog(); // Serilog를 ILogger 구현체로 추가
});
// 3. ILogger 인스턴스 생성
Microsoft.Extensions.Logging.ILogger logger = loggerFactory.CreateLogger<Program>();
:
5. Serilog 설정파일의 로그출력 패턴 예
5.1 Console sink의 설정값
"Args": {
"outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff} [{Level:u3}] {Namespace}.{Method} {Message}{NewLine}{Exception}"
}
outputTemplate : 로그메시지 형식
{Timestamp:yyyy-MM-dd HH:mm:ss.fff} : 날짜 시간정보
{Level:u3} : 로그레벨정보(3글자)
{Namespace} : 로그출력 메쏘드가 호출된 클래스이름(네임스페이스 포함)
{Method} : 로그출력 메쏘드가 호출된 메쏘드이름
{Message} : 로그메시지
{NewLine} : 줄바꿈
{Exception} : 예외가 있을 경우 예외정보
Console로그예
- log4net은 색깔 구분이 없음
5.2 File sink의 설정값
path : 로그파일 이름
retainedFileCountLimit : 로그파일 개수 제한
fileSizeLimitBytes : 로그파일 크기 제한
rollOnFileSizeLimit : 지정된 로그파일 크기가 되면 새로운 파일 생성 여부 설정
- 위 로그설정에 대한 로그파일 생성 동작
파일 크기가 1KB가 넘으면 app_번호.log로 새로운 파일을 만들고 이 파일에 로그를 저장한다.
app_번호.log의 번호가 제일 큰 파일에 가장 최근 로그가 있다.
(처음에는 app.log파일이 생성되지만 app_번호.log파일이 생성되면서 app.log는 지워진다)
log4net저장방식과 다르다
log4net은 app.log에 계속 로그를 저장한다(app.log가 가장 최근 로그).
이전 로그파일은 “app.log.년-월-일”의 파일 이름으로 저장한다.
파일로그예
5.3 Seq sink의 설정값
"Args": {
"serverUrl": "http://localhost:5341"
}
serverUrl : Seq서버 주소
Seq로그예
Seq의 예외로그예
6. WithCallerInfo enricher사용시 주의사항
- allowedAssemblies설정이 잘못되면 {Namespace}.{Method} 출력이 정상적으로 되지 않는다.
콘솔앱( SerilogExConsoleApp1)용 SerilogSetting.json의 WithCallerInfo enricher설정
WPF앱( SerilogWpfApp1)용 SerilogSetting.json의 WithCallerInfo enricher설정
SerilogWpfApp1에 SerilogExConsoleApp1의 WithCallerInfo enricher설정을 사용하면 아래와 같이 일부 정보가 빠진 로그출력이 나온다(File sink 출력예, 클래스이름.메쏘드이름이 출력되야 하는데, .만 출력된다)
'programming' 카테고리의 다른 글
ILogger의 구현체로 NLog를 사용하기 (2) | 2024.10.02 |
---|---|
ILogger의 구현체로 log4net을 사용하기 (1) | 2024.10.01 |
같은 이벤트에 대한 View와 ViewModel의 메쏘드 호출 순서 (0) | 2024.09.27 |
안드로이드 개발 자료모음 (0) | 2022.02.01 |
GPIO - 버튼처리 (0) | 2020.08.08 |