본문 바로가기
프로그래밍/C#

C# Serilog에서 Sub-Logger를 이용해서 별도의 하위 로거 설정하기

by bantomak 2025. 5. 16.
반응형

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 : 하위 로거에만 적용되는 필터/부가 정보 설정

댓글