상세 컨텐츠

본문 제목

[.NET 10] Serilog를 이용한 고성능 구조화 로깅 적용 가이드

개발/C#

by 코딩하는 박줄기 2026. 1. 23. 09:37

본문

728x90
반응형

녕하세요! 오늘은 .NET 10 (Minimal API) 환경에서 강력한 로깅 라이브러리인 Serilog를 설정하는 핵심 순서를 정리해 드립니다.

1. 필수 NuGet 패키지 설치

가장 먼저 터미널(CLI)에서 프로젝트에 필요한 패키지들을 설치해 줍니다.

 
# 기본 라이브러리 및 설정 확장
dotnet add package Serilog.AspNetCore
dotnet add package Serilog.Settings.Configuration

# 로그 출력 대상(Sinks) 설정
dotnet add package Serilog.Sinks.Console
dotnet add package Serilog.Sinks.File
dotnet add package Serilog.Sinks.Seq

2. Program.cs 설정 (부트스트랩 로깅 포함)

앱이 완전히 초기화되기 전 발생하는 오류까지 잡아내기 위해 Bootstrap Logger 패턴을 적용한 예시입니다.

 
using Serilog;

// 1. 초기 부트스트랩 로거 설정
// 설정 파일을 읽기 전 발생하는 초기 에러를 잡기 위해 선언합니다.
Log.Logger = new LoggerConfiguration()
    .WriteTo.Console()
    .CreateBootstrapLogger();

try
{
    var builder = WebApplication.CreateBuilder(args);

    // 2. Serilog 교체 설정
    builder.Host.UseSerilog((ctx, lc) => lc
        .ReadFrom.Configuration(ctx.Configuration) // appsettings.json의 설정을 반영
        .Enrich.FromLogContext());                // 로그에 컨텍스트 정보 자동 추가

    builder.Services.AddControllers();
    builder.Services.AddOpenApi();

    var app = builder.Build();

    // 3. 미들웨어 설정
    if (app.Environment.IsDevelopment())
    {
        app.MapOpenApi();
    }

    // HTTP 요청 요약 로깅 미들웨어 (강력 추천!)
    app.UseSerilogRequestLogging();

    app.UseHttpsRedirection();
    app.UseAuthorization();
    app.MapControllers();

    app.Run();
}
catch (Exception ex)
{
    Log.Fatal(ex, "애플리케이션이 예상치 못하게 종료되었습니다.");
}
finally
{
    // 4. 리소스 해제
    Log.CloseAndFlush();
}

3. appsettings.json 환경 설정

로그 레벨과 파일 저장 경로 등을 파일로 관리하면 배포 환경마다 유연하게 대처할 수 있습니다.

 

{
  "Serilog": {
    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "Microsoft": "Warning",
        "Microsoft.AspNetCore": "Information",
        "Microsoft.Hosting.Lifetime": "Information",
        "System": "Warning"
      }
    },
    "WriteTo": [
      { "Name": "Console" },
      {
        "Name": "File",
        "Args": {
          "path": "logs/log-.txt",
          "rollingInterval": "Day" 
        }
      }
    ]
  },
  "AllowedHosts": "*"
}

💡 핵심 포인트 정리

1. Bootstrap Logger를 왜 쓰나요? > 앱이 실행되다가 설정 파일을 읽기도 전에 에러가 나면 원인을 찾기 어렵습니다. 이를 방지하기 위해 정적 로거를 먼저 띄우는 것이 .NET의 권장 패턴입니다.

2. UseSerilogRequestLogging의 장점 > ASP.NET Core의 기본 로그는 너무 장황합니다. 이 미들웨어를 쓰면 HTTP 요청당 딱 한 줄의 깔끔한 요약 로그(상태 코드, 소요 시간 등)만 남길 수 있습니다.

3. RollingInterval.Day > 로그 파일을 무한정 키우지 않고, 매일 새로운 파일로 분리하여 서버 용량을 효율적으로 관리합니다.


🔗 관련 공식 문서 링크

 

 

728x90
반응형

관련글 더보기

댓글 영역