녕하세요! 오늘은 .NET 10 (Minimal API) 환경에서 강력한 로깅 라이브러리인 Serilog를 설정하는 핵심 순서를 정리해 드립니다.
가장 먼저 터미널(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
앱이 완전히 초기화되기 전 발생하는 오류까지 잡아내기 위해 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();
}
로그 레벨과 파일 저장 경로 등을 파일로 관리하면 배포 환경마다 유연하게 대처할 수 있습니다.
{
"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 > 로그 파일을 무한정 키우지 않고, 매일 새로운 파일로 분리하여 서버 용량을 효율적으로 관리합니다.
| Windows 서비스 만들기: .NET 8 쉽고 빠르게 구현 (0) | 2024.10.04 |
|---|---|
| [C#] 캐스팅 잘림 및 변환 반올림/반내림 (0) | 2024.01.07 |
| [C#] as와 is 연산자를 활용한 안전한 형 변환 (0) | 2023.09.21 |
| [C#] 제네릭 형식: 코드의 재사용성과 안정성 확보 (0) | 2023.09.20 |
| [C#] ?? 연산자 - null 병합 연산자의 활용 (0) | 2023.09.19 |
댓글 영역