原文連結:https://www.51cto.com/article/781651.html
Serilog 是一個為 .NET 應用程式設計的強大的診斷日誌庫,它以易於設定、簡潔的API和跨所有最新 .NET 平臺的相容性而著稱。Serilog 的核心優勢在於其對結構化日誌記錄的支援,這使得它在處理複雜、分散式和非同步的應用程式和系統時表現出色。以下是 Serilog 的一些主要特點:
-
可擴充套件性:Serilog 可以輕鬆擴充套件以滿足不同的日誌記錄需求,例如日誌儲存、格式化和過濾。它支援各種外掛和自定義擴充套件,允許使用者根據專案的具體要求定製日誌記錄功能。
-
結構化日誌:Serilog 支援結構化日誌,允許以鍵值對的形式記錄資訊,這使得日誌資料更容易分析和查詢,對於在日誌中儲存複雜的資料非常有用。
-
非同步日誌記錄:Serilog 可以非同步記錄日誌,這有助於提高應用程式的效能,減少因日誌記錄而引起的延遲。
-
多種輸出目標:Serilog 支援多種輸出目標,包括控制檯、檔案、資料庫、第三方日誌服務等。使用者可以根據需求將日誌記錄到不同的目標。
-
過濾器和級別控制:Serilog 允許使用過濾器來選擇哪些日誌訊息應該被記錄,以及記錄的級別。這有助於減少日誌的噪音,並僅記錄關鍵資訊。
-
內建支援:Serilog 支援各種 .NET 技術棧,包括 ASP.NET Core、Entity Framework、Xamarin 和其他常見的 .NET 應用程式框架。
Serilog 的安裝和配置也非常簡單。使用者可以透過 NuGet 包管理器安裝 Serilog 及其相關包,例如 Serilog
、Serilog.Sinks.Console
等,來實現日誌的記錄和輸出。配置 Serilog 通常是在應用程式的啟動檔案中進行,例如在 ASP.NET Core 或 Console 應用程式中的 Program.cs
檔案。
Serilog 還支援將日誌記錄到外部服務,如 Seq、Elasticsearch 等,透過專用的接收器(sinks)實現。此外,Serilog 提供了對日誌記錄級別的精細控制,允許全域性設定最小級別,也可以按接收器設定最小級別。
總的來說,Serilog 是一個功能豐富、靈活且易於使用的日誌框架,非常適合需要結構化日誌記錄和複雜日誌管理需求的 .NET 應用程式
Serilog 的基本使用
1. 安裝 Serilog
首先,你需要在專案中安裝 Serilog 包,可以使用 NuGet 包管理器或 .NET CLI 進行安裝。
dotnet add package Serilog dotnet add package Serilog.Sinks.Console
上述命令將安裝 Serilog 的核心包和一個輸出到控制檯的外掛。
注意:需要cd /d 到.csproj檔案的路徑下才能執行安裝。
2. 配置 Serilog
在應用程式中配置 Serilog,你可以在 Program.cs 檔案中進行配置。以下是一個簡單的配置示例,將日誌記錄到控制檯。
using Serilog; using Serilog.Sinks.Console; public class Program { public static void Main(string[] args) { Log.Logger = new LoggerConfiguration() .WriteTo.Console() .CreateLogger(); // 啟動應用程式 CreateWebHostBuilder(args).Build().Run(); } public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseSerilog() // 將 Serilog 整合到 ASP.NET Core .UseStartup<Startup>(); }
3. 記錄日誌
現在,你可以在應用程式中記錄日誌。以下是一個簡單的示例,在控制器中記錄日誌:
using Microsoft.AspNetCore.Mvc; using Serilog; public class MyController : ControllerBase { public IActionResult Index() { Log.Information("訪問了首頁"); return View(); } }
上述程式碼使用 Log.Information 方法記錄資訊級別的日誌訊息。
4. 結構化日誌記錄
Serilog 支援結構化日誌記錄,這允許你以鍵值對的形式記錄資訊。以下是一個示例:
Log.Information("使用者登入 {@User}", new { Username = "john", UserId = 123 });
這種結構化的日誌記錄對於儲存和查詢複雜的資料非常有用。
Serilog 高階應用
1. 自定義輸出目標
Serilog 允許你將日誌記錄到不同的輸出目標,如檔案、資料庫或第三方日誌服務。以下是一個示例,將日誌記錄到檔案中。
首先,安裝 Serilog 的檔案輸出外掛:
dotnet add package Serilog.Sinks.File
然後,配置 Serilog 以將日誌記錄到檔案:
Log.Logger = new LoggerConfiguration() .WriteTo.Console() .WriteTo.File("log.txt") // 將日誌記錄到檔案 .CreateLogger();
2. 非同步日誌記錄
使用 Serilog 非同步記錄日誌可以提高效能,特別是在高負載應用程式中。以下是一個示例:
Log.Logger = new LoggerConfiguration() .WriteTo.Console() .WriteTo.Async(a => a.File("log.txt")) // 非同步將日誌記錄到檔案 .CreateLogger();
3. 過濾器和級別控制
Serilog 允許你使用過濾器來選擇哪些日誌訊息應該被記錄,以及記錄的級別。以下是一個示例,只記錄資訊級別的日誌訊息:
Log.Logger = new LoggerConfiguration() .WriteTo.Console() .MinimumLevel.Information() // 只記錄資訊級別的日誌 .CreateLogger();
你還可以使用過濾器來更精確地控制哪些訊息應該被記錄。
Serilog 持久化方案
Serilog 支援各種持久化方案,允許你將日誌資料儲存在不同的地方,如檔案、資料庫或第三方日誌服務。以下是一些常見的持久化方案。
1. 檔案持久化
你可以使用 Serilog 的檔案外掛將日誌記錄到檔案中,如前面所示。這是一個簡單的持久化方案,適用於小型應用程式。
2. 資料庫持久化
如果你希望將日誌資料儲存在資料庫中,你可以使用 Serilog 的資料庫外掛,如 Serilog.Sinks.MSSqlServer 或 Serilog.Sinks.PostgreSQL。
首先,安裝適當的資料庫外掛:
dotnet add package Serilog.Sinks.MSSqlServer
然後,配置 Serilog 以將日誌記錄到資料庫:
Log.Logger = new LoggerConfiguration() .WriteTo.Console() .WriteTo.MSSqlServer("connectionString", "tableName") // 將日誌記錄到資料庫 .CreateLogger();
3. Elasticsearch 持久化
如果你使用 Elasticsearch 作為日誌儲存後端,你可以使用
Serilog.Sinks.Elasticsearch 外掛將日誌記錄到 Elasticsearch。
首先,安裝 Elasticsearch 外掛:
dotnet add package Serilog.Sinks.Elasticsearch
然後,配置 Serilog 以將日誌記錄到 Elasticsearch:
Log.Logger = new LoggerConfiguration() .WriteTo.Console() .WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri("http://localhost:9200"))) // 將日誌記錄到 Elasticsearch .CreateLogger();
這個外掛將日誌資料匯入 Elasticsearch,你可以使用 Elasticsearch 強大的搜尋和分析功能來查詢日誌資料。
Serilog 是一個功能豐富、可擴充套件且易於使用的.NET日誌庫。它支援多種日誌記錄場景,包括控制檯、檔案、資料庫和第三方日誌服務,具有強大的結構化日誌記錄功能,使日誌資料更容易管理和分析。在本文中,我們詳細介紹了 Serilog 的優秀之處和使用方法,包括基礎使用、高階應用和不同的持久化方案。希望這個指南有助於你更好地理解和利用 Serilog 來提高應用程式的日誌記錄質量和效能。