Serilog

https://serilog.net/

安裝套件

dotnet add package Serilog --version 3.1.1 dotnet add package Serilog.Sinks.Console --version 5.0.1 dotnet add package Serilog.AspNetCore --version 8.0.0 dotnet add package Serilog.Settings.Configuration dotnet add package Serilog.Sinks.Elasticsearch --version 9.0.3

appsetting.json

{ "Serilog": { "MinimumLevel": { "Default": "Debug", "Override": { "Microsoft": "Information", "System": "Information" } }, "Using": ["Serilog.Sinks.Console", "Serilog.Sinks.Elasticsearch"], "WriteTo": [ { "Name": "Console", "Args": { "theme": "Serilog.Sinks.SystemConsole.Themes.AnsiConsoleTheme::Code, Serilog.Sinks.Console", "outputTemplate": "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj} <s:{SourceContext}>{NewLine}{Exception}" } }, { "Name": "Elasticsearch", "Args": { "nodeUris": "http://localhost:9200", "indexFormat": "slog-{0:yyyy.MM}" } } ] }, "AllowedHosts": "*" }

Program.cs

using Serilog; var builder = WebApplication.CreateBuilder(args); builder.Host.UseSerilog(); // Add services to the container. // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); builder.Services.AddControllers(); var app = builder.Build(); // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseSerilogRequestLogging(); app.MapControllers(); app.Run();

Controller

using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; namespace w2.Controllers { [ApiController] [Route("api/[controller]")] public class HomeController : ControllerBase { private readonly ILogger<HomeController> log; public HomeController(ILogger<HomeController> log) { this.log = log; } [HttpGet] public string Hello() { this.log.LogInformation("hello"); return "hello"; } } }