🔧 ASP.NET Core MVC + Blazor Server 프로젝트에서 Serilog로 SQL Server의 AppLogs 테이블에 로그 남기기

  • 3 minutes to read
NOTE

본 문서는 OpenAI의 ChatGPT 도움을 받아 정리되었습니다. 기술 내용을 보다 정확하고 쉽게 전달하기 위해 AI 도우미와 협업하여 작성되었습니다.

✅ 목표

  • Serilog를 이용해 Error, Information 등의 로그를 SQL Server의 AppLogs 테이블에 저장
  • MVC와 Blazor Server 양쪽에서 사용할 수 있도록 구성
  • Serilog의 기본 테이블 스키마를 기반으로 구성

1️⃣ Serilog 관련 NuGet 패키지 설치

터미널 또는 패키지 관리자 콘솔에서 아래 명령어 실행:

dotnet add package Serilog.AspNetCore
dotnet add package Serilog.Sinks.MSSqlServer

2️⃣ SQL Server에 로그 테이블 생성

AppLogs라는 테이블에 저장하기 위해 다음 스크립트 실행 (Serilog 기본 구조 기준)

CREATE TABLE AppLogs (
    Id INT IDENTITY(1,1) PRIMARY KEY,
    Message NVARCHAR(MAX),
    MessageTemplate NVARCHAR(MAX),
    Level NVARCHAR(128),
    TimeStamp DATETIMEOFFSET,
    Exception NVARCHAR(MAX),
    Properties NVARCHAR(MAX)
);

📝 AutoCreateSqlTable = true 옵션을 사용하면 자동 생성도 가능하지만, 명시적으로 위처럼 테이블을 생성해두는 걸 권장합니다.


3️⃣ Program.cs 또는 Startup.cs에 Serilog 구성 추가

👉 Program.cs 예시 (ASP.NET Core 6 이상)

using Serilog;
using Serilog.Sinks.MSSqlServer;
using System.Data;

var builder = WebApplication.CreateBuilder(args);

#region Serilog
// 1. Serilog 컬럼 옵션 정의
var columnOptions = new ColumnOptions
{
    Store = new List<StandardColumn>
    {
        StandardColumn.Message,
        StandardColumn.MessageTemplate,
        StandardColumn.Level,
        StandardColumn.TimeStamp,
        StandardColumn.Exception,
        StandardColumn.Properties
    }
};

// 2. 로그 구성
Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Debug()
    .WriteTo.Console()
    .WriteTo.MSSqlServer(
        connectionString: builder.Configuration.GetConnectionString("DefaultConnection"),
        sinkOptions: new MSSqlServerSinkOptions
        {
            TableName = "AppLogs",
            AutoCreateSqlTable = false // 이미 테이블이 존재하므로 false
        },
        restrictedToMinimumLevel: Serilog.Events.LogEventLevel.Error,
        columnOptions: columnOptions
    )
    .Enrich.FromLogContext()
    .CreateLogger();

// 3. Serilog를 ASP.NET Core 로그로 사용하도록 등록
builder.Host.UseSerilog();
#endregion

var app = builder.Build();

app.UseRouting();
app.UseAuthorization();
app.MapControllers(); // MVC
app.MapBlazorHub();   // Blazor Server
app.MapFallbackToPage("/_Host");

app.Run();

4️⃣ appsettings.json에 연결 문자열 추가

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=.;Database=MyAppDb;Trusted_Connection=True;"
  }
}

5️⃣ MVC 또는 Blazor 컴포넌트에서 로그 사용 예

ILogger<T> 주입받아 사용

public class HomeController : Controller
{
    private readonly ILogger<HomeController> _logger;

    public HomeController(ILogger<HomeController> logger)
    {
        _logger = logger;
    }

    public IActionResult Index()
    {
        _logger.LogInformation("HomeController Index 접근됨");
        return View();
    }
}

✅ try-catch 내에서 예외 로깅

try
{
    throw new Exception("의도적인 예외 테스트");
}
catch (Exception ex)
{
    _logger.LogError(ex, "예외 발생: {Message}", ex.Message);
}

6️⃣ 로그 확인

SSMS(SQL Server Management Studio)에서 다음 쿼리 실행:

SELECT TOP 100 * FROM AppLogs ORDER BY TimeStamp DESC;

🧠 추가 팁

  • AppLogs 외에도 AuditLogs, RequestLogs 등을 추가로 만들어 구분 저장 가능
  • Blazor Server에서도 ILogger<MyComponent>를 사용하면 동일하게 작동
  • 개발 중에는 Console, 운영 중에는 SQL + File 로깅을 병행하면 유용

✅ 마무리

이제 ASP.NET Core MVC와 Blazor Server 프로젝트에서 발생하는 모든 로그를 SQL Server의 AppLogs 테이블에 기록할 수 있습니다. 운영 환경에서는 로그 데이터를 분석하거나 모니터링 시스템과 연동하여 더욱 효과적인 진단 도구로 활용할 수 있습니다.

VisualAcademy Docs의 모든 콘텐츠, 이미지, 동영상의 저작권은 박용준에게 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다. 사이트의 콘텐츠를 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다. 단, 링크와 SNS 공유, Youtube 동영상 공유는 허용합니다. www.VisualAcademy.com
박용준 강사의 모든 동영상 강의는 데브렉에서 독점으로 제공됩니다. www.devlec.com