Serilog
Serilog 是一個 .NET 平台上強大的日誌紀錄框架。它提供了結構化日誌記錄功能,使得日誌的資料更加結構化和有意義,便於在不同環境中進行搜尋、篩選和分析。Serilog 支援多種目標(稱為“接收器”,如檔案、資料庫、控制台、遠端伺服器等)來儲存日誌,並且能夠自訂輸出格式,滿足不同的日誌需求。
Serilog 的特色
結構化日誌:使用結構化數據記錄(例如 JSON 格式),便於分析和篩選。
靈活的接收器:支援多種接收器,例如控制台、檔案、資料庫、Elasticsearch 等。
支援多種日誌等級:Trace、Debug、Information、Warning、Error、Fatal 等等。
可擴充性:可以通過自訂接收器和格式來滿足不同的日誌需求。
安裝 Serilog
在 .NET 中可以通過 NuGet 安裝 Serilog 及其常用接收器。以控制台和檔案接收器為例:
dotnet add package Serilog
dotnet add package Serilog.Sinks.Console
dotnet add package Serilog.Sinks.File
基本使用範例
以下是一個使用 Serilog 寫入日誌的範例程式碼。
1. 基本設定與日誌寫入
這個範例會將日誌寫入控制台。
using System;
using Serilog;
class Program
{
static void Main()
{
// 基本設定,將日誌寫入控制台
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.Console()
.CreateLogger();
// 寫入不同等級的日誌
Log.Information("這是一則資訊日誌。");
Log.Warning("這是一則警告日誌。");
Log.Error("這是一則錯誤日誌。");
// 結束前呼叫
Log.CloseAndFlush();
}
}
2. 使用結構化日誌
Serilog 支援在日誌中插入結構化數據,便於日後分析。例如,可以傳入具名參數來添加資料。
Log.Information("使用者 {User} 在 {Time} 登入系統", "Alice", DateTime.Now);
這樣的結構化日誌會顯示為:
使用者 Alice 在 2024-11-04 10:30:00 登入系統
日誌框架可以識別 {User}
和 {Time}
作為鍵值,方便搜尋和篩選。
3. 將日誌寫入檔案
要將日誌輸出到檔案,可以加入 File
接收器:
using Serilog;
Log.Logger = new LoggerConfiguration()
.WriteTo.File("logs/log.txt", rollingInterval: RollingInterval.Day)
.CreateLogger();
Log.Information("這是一則記錄到檔案的日誌。");
Log.CloseAndFlush();
此設定會在 logs
資料夾下建立 log.txt
檔案,並依日期自動分檔。
配合 .NET ASP.NET Core 使用
在 ASP.NET Core 中,通常會在 Program.cs
或 appsettings.json
中設定 Serilog:
1. Program.cs
中的設定範例
Program.cs
中的設定範例using Serilog;
public class Program
{
public static void Main(string[] args)
{
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(configuration) // 讀取 appsettings.json 設定
.Enrich.FromLogContext()
.WriteTo.Console()
.CreateLogger();
try
{
Log.Information("啟動應用程式");
CreateHostBuilder(args).Build().Run();
}
catch (Exception ex)
{
Log.Fatal(ex, "應用程式啟動失敗");
}
finally
{
Log.CloseAndFlush();
}
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseSerilog() // 使用 Serilog 作為日誌紀錄
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
2. 在 appsettings.json
中配置 Serilog
appsettings.json
中配置 Serilog可以在 appsettings.json
中設置日誌紀錄的細節,例如輸出到控制台和檔案:
{
"Serilog": {
"MinimumLevel": "Debug",
"WriteTo": [
{ "Name": "Console" },
{
"Name": "File",
"Args": {
"path": "logs/log.txt",
"rollingInterval": "Day"
}
}
]
}
}
常見接收器
Console:輸出到控制台。
File:寫入到檔案,支援滾動檔案(如每天新建一個檔案)。
Seq:支援寫入到 Seq 日誌伺服器。
Elasticsearch:整合到 ELK 堆疊,用於日誌分析。
SQL Server:將日誌寫入 SQL 資料庫。
結論
Serilog 是 .NET 開發中非常靈活且強大的日誌紀錄框架。透過結構化日誌和多樣化的接收器支援,開發者能更有效地管理和分析日誌,使得應用程式的維護和調試更加容易。
Last updated