# Serilog
https://serilog.net/
# 安裝套件
```bash=
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
```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
```csharp=
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
```csharp=
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";
}
}
}
```