本文將介紹如何為 ASP.NET Core 專案新增 Serilog。
首先,我們需要在專案中新增 Serilog 的 NuGet 包。
dotnet add package Serilog.AspNetCore
在 Program.cs 中,新增 Serilog 的設定。
using Serilog;
Log.Logger = new LoggerConfiguration()
.WriteTo.Console()
.CreateLogger();
try
{
Log.Information("Starting web application");
var builder = WebApplication.CreateBuilder(args);
builder.Host.UseSerilog(); // <-- Add this line
var app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.Run();
}
catch (Exception ex)
{
Log.Fatal(ex, "Application terminated unexpectedly");
}
finally
{
Log.CloseAndFlush();
}
這段程式碼中,我們使用 Log.Logger
建立了一個 Serilog 的紀錄檔記錄器。然後,我們使用 Log.Information
記錄了一條紀錄檔。在 CreateHostBuilder
方法中,我們使用 builder.Host.UseSerilog()
將 Serilog 設定到主機中。
這裡的 Try/Catch 語句是為了確保在應用程式退出時,紀錄檔記錄器能夠正確關閉。
我們可以移除 appsetting.json 中的紀錄檔記錄器設定,僅僅保留 Serilog 的設定。
{
"Serilog": {
"Using": ["Serilog.Sinks.Console", "Serilog.Sinks.File"],
"MinimumLevel": "Debug",
"WriteTo": [{ "Name": "Console" }],
"Enrich": ["FromLogContext", "WithMachineName", "WithThreadId"]
}
}
執行應用程式,我們可以看到控制檯中輸出了紀錄檔。
[22:14:44.646 DBG] RouteCollection.RouteAsync
Routes:
Microsoft.AspNet.Mvc.Routing.AttributeRoute
{controller=Home}/{action=Index}/{id?}
Handled? True
[22:14:44.647 DBG] RouterMiddleware.Invoke
Handled? True
[22:14:45.706 DBG] /lib/jquery/jquery.js not modified
[22:14:45.706 DBG] /css/site.css not modified
[22:14:45.741 DBG] Handled. Status code: 304 File: /css/site.css
記錄紀錄檔和之前的 ASP.NET Core 專案一樣,我們可以使用 ILogger
介面。
public class HomeController : Controller
{
private readonly ILogger<HomeController> _logger;
public HomeController(ILogger<HomeController> logger)
{
_logger = logger;
}
public IActionResult Index()
{
_logger.LogInformation("Hello World!");
return View();
}
}
在本文中,我們介紹瞭如何為 ASP.NET Core 專案新增 Serilog。
Serilog.AspNetCore: https://www.nuget.org/packages/Serilog.AspNetCore/
[2]Serilog.Settings.Configuration: https://github.com/serilog/serilog-settings-configuration