我經常推薦 Seq 這套記錄伺服器(Log Server),如果要將 ASP.NET Core 的 Log 全部送到 Seq 儲存的話,其實非常簡單,因為官方的 Seq.Extensions.Logging 套件預設就支援 Microsoft.Extensions.Logging
的擴充,提供一個現成的 Logging Provider 讓你很方便的將 Seq 快速加入到 ASP.NET Core 之中。這篇文章我就來說說這個設定的過程。
設定步驟
-
先透過 Docker 啟動一個 Seq 伺服器
docker run --name seq -d --restart unless-stopped -e ACCEPT_EULA=Y -p 5341:80 datalust/seq:latest
預設會監聽 localhost:5341
-
假設我們建立一個 ASP.NET Core MVC 應用程式名為 mvc1
dotnet new mvc -n mvc1
cd mvc1
-
在專案中加入 Seq.Extensions.Logging NuGet 套件
dotnet add package Seq.Extensions.Logging
-
在 Program.cs
加入 Seq 的 Log Provider
builder.Logging.AddSeq();
如果要指定 Seq 伺服器位置與 API Key 的話,也可以這樣寫:
builder.Logging.AddSeq(serverUrl: "http://localhost:5341", apiKey: "your-api-key");
如果要直接從組態進行設定,可以這樣寫:
builder.Logging.AddSeq(builder.Configuration.GetSection("Seq"));
而 appsettings.json
的設定值如下:
{
"Seq": {
"ServerUrl": "http://localhost:5341",
"ApiKey": "1234567890",
"MinimumLevel": "Trace",
"LevelOverride": {
"Microsoft": "Warning"
}
}
}
測試記錄到 Seq
-
修改 HomeController
類別,加入不同 Log Level 的紀錄
using System.Diagnostics;
using Microsoft.AspNetCore.Mvc;
using mvc1.Models;
namespace mvc1.Controllers;
public class HomeController : Controller
{
private readonly ILogger<HomeController> _logger;
public HomeController(ILogger<HomeController> logger)
{
_logger = logger;
}
public IActionResult Index()
{
_logger.LogTrace("Hello, world!");
_logger.LogDebug("Hello, world!");
_logger.LogInformation("Hello, world!");
_logger.LogWarning("Hello, world!");
_logger.LogError("Hello, world!");
_logger.LogCritical("Hello, world!");
return View();
}
}
-
調整 appsettings.Development.json
的 Logging
設定
{
"Logging": {
"LogLevel": {
"Default": "Trace",
"Microsoft.AspNetCore": "Trace"
}
}
}
-
啟動網站並瀏覽首頁
dotnet run
-
進入 Seq 首頁 ( http://localhost:5341 ) 即可看見 Log 已經被成功寫入!👍
相關連結