為 ASPNETCORE 7 專案新增 Serilog

2023-01-02 12:00:27

本文將介紹如何為 ASP.NET Core 專案新增 Serilog。

新增 Serilog

首先,我們需要在專案中新增 Serilog 的 NuGet 包。

dotnet add package Serilog.AspNetCore

修改 Program.cs

在 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[1]
  • Serilog.Settings.Configuration[2]
  • 本文作者: newbe36524
  • 本文連結: https://www.newbe.pro/ChatAI/0x014-Intro-serilog-into-aspnet-core-7/
  • 版權宣告: 本部落格所有文章除特別宣告外,均採用 BY-NC-SA 許可協定。轉載請註明出處!

參考資料

[1]

Serilog.AspNetCore: https://www.nuget.org/packages/Serilog.AspNetCore/

[2]

Serilog.Settings.Configuration: https://github.com/serilog/serilog-settings-configuration