🔧 ASP.NET Core MVC + Blazor Server 프로젝트에서 Serilog로 SQL Server의 AppLogs
테이블에 로그 남기기
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
테이블에 기록할 수 있습니다. 운영 환경에서는 로그 데이터를 분석하거나 모니터링 시스템과 연동하여 더욱 효과적인 진단 도구로 활용할 수 있습니다.
추천 자료: ASP.NET Core 인증 및 권한 부여
추천 자료: .NET Blazor에 대해 알아보시겠어요? .NET Blazor 알아보기를 확인해보세요!