제3자 로깅 서비스: Serilog, NLog, ELK Stack (Elasticsearch, Logstash, Kibana)와 같은 외부 로깅 라이브러리를 사용하여 로그를 특정 스토리지나 서비스로 보낼 수 있습니다.
1. NuGet 패키지 설치

1 2 3 4 |
dotnet add package Serilog.AspNetCore dotnet add package Serilog.Sinks.File |
2. appsettings.json 설정
Serilog를 JSON 설정 파일을 통해 구성할 수도 있습니다. 다음은 appsettings.json
을 사용하여 Serilog를 구성하는 예제입니다.
다음은 appsettings.json
파일에서 로깅 설정을 정의하는 예제입니다:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
{ "Serilog": { "MinimumLevel": { "Default": "Information", "Override": { "Microsoft": "Warning", "System": "Warning" } }, "WriteTo": [ { "Name": "Console" }, { "Name": "File", "Args": { "path": "logs/myapp.txt", "rollingInterval": "Day" } } ] } } |
3. Program.cs 수정
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.Hosting; using Serilog; using Serilog.Settings.Configuration; var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllers(); // Configure Serilog from appsettings.json builder.Host.UseSerilog((ctx, lc) => lc .ReadFrom.Configuration(ctx.Configuration)); var app = builder.Build(); // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseRouting(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); try { Log.Information("Starting up"); app.Run(); } catch (Exception ex) { Log.Fatal(ex, "Application start-up failed"); } finally { Log.CloseAndFlush(); } |
3. 컨트롤러나 서비스에서 Serilog를 사용
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; namespace InMemoryCacheCore.Controllers { [Route("api/[controller]")] [ApiController] public class BasicCodeController : ControllerBase { private readonly ILogger<BasicCodeController> _logger; public BasicCodeController(ILogger<BasicCodeController> logger) { _logger = logger; } [HttpGet("test")] public IActionResult Test() { _logger.LogInformation("Test endpoint called"); _logger.LogInformation("Structured log example: {User} performed {Action} at {Time}", "Alice", "Login", DateTime.UtcNow); return Ok("Logging test"); } } } |
결과 Log text
1 2 3 4 |
2024-07-08 15:07:19.194 +09:00 [INF] Test endpoint called 2024-07-08 15:07:19.197 +09:00 [INF] Structured log example: Alice performed Login at "2024-07-08T06:07:19.1976664Z" |