반응형
Serilog 하위 로거(Sub-Logger) 생성하기
Serilog의 고급 사용 패턴 중 하나로, 중첩된 로그 파이프라인을 정의하여 구현한다.
Logger()는 Serilog에서 하위 로거를 구성할 수 있는 메서드로 Logger(lc => ...) 내부에는 또 다른 LoggerConfiguration이 들어가며, 그 안에서 독립적으로 WriteTo, Filter, Enrich 등을 설정할 수 있다.
기본 예제
Log.Logger = new LoggerConfiguration()
.WriteTo.Console()
.WriteTo.File("logs/log.txt")
.WriteTo.Debug()
.CreateLogger();
하위 로거 생성 예제
configuration.WriteTo.Async(wt =>
wt.Logger(lc => lc
.Filter.ByIncludingOnly(Matching.WithProperty("type", "normal"))
.WriteTo.Console()
)
.WriteTo.Async(wt =>
wt.Logger(lc => lc
.Filter.ByIncludingOnly(Matching.WithProperty("type", "special"))
.WriteTo.Debug()
)
);
- Filter 메서드를 이용해서 원하는 속성에 대해서 별도의 출력을 지정해서 로그로 남기도록 설정
configuration.WriteTo.Logger(lc => lc
.WriteTo.File("logs/errors.txt",
restrictedToMinimumLevel: LogEventLevel.Error, outputTemplate: "[ERROR] {Message}{NewLine}")
);
- 하위 로거에서 파일 출력만 별도의 포맷으로 로그 남기도록 설정
언제 Logger(...) 쓰는가?
- 특정 조건에서만 로그 출력 : .Filter.ByIncludingOnly(...)
- 특정 Sink에만 설정 적용 : 파일만 다른 포맷
- Sink를 비동기로 감싸고 싶을 때 : .WriteTo.Async(wt => wt.Logger(...))
- Sink 그룹을 묶고 싶을 때 : Console + File 묶어서 Async 처리 등
정리하자면
- WriteTo.Async(wt => ...) : 비동기 Sink 래퍼
- wt.Logger(...) : 하위 로거 정의 (독립 설정 가능)
- lc.WriteTo.X() : 하위 로거의 Sink 지정
- Filter, Enrich : 하위 로거에만 적용되는 필터/부가 정보 설정
'프로그래밍 > C#' 카테고리의 다른 글
C# EF Core 사용시 DB 상태를 간단하게 체크하는 방법 (0) | 2025.05.19 |
---|---|
UseForwardedHeaders를 이용해서 클라이언트 실제 IP 얻기 (0) | 2025.05.19 |
비동기 메서드의 형식을 맞추기 위해서 필요한 Task.CompletedTask (0) | 2025.05.15 |
C# try-catch로 예외 상황을 컨트롤 해보자 (0) | 2025.05.14 |
C# 객체 이니셜라이저(Object Initializer)를 알아보자 (1) | 2025.05.12 |
댓글