C# Serilog 日志的使用小結(jié)
Serilog 的基本概念
日志級(jí)別
Serilog
支持多種日志級(jí)別,從低到高依次是:
Verbose
(詳細(xì)):記錄最詳細(xì)的信息,通常用于調(diào)試。Debug
(調(diào)試):記錄調(diào)試信息,比Verbose
稍低。Information
(信息):記錄正常運(yùn)行時(shí)的信息。Warning
(警告):記錄可能影響正常運(yùn)行的警告信息。Error
(錯(cuò)誤):記錄運(yùn)行時(shí)的錯(cuò)誤。Fatal
(致命):記錄導(dǎo)致應(yīng)用程序崩潰的致命錯(cuò)誤。
日志輸出目標(biāo)(Sink)
Serilog
支持多種日志輸出目標(biāo),例如:
- 控制臺(tái)(
Console
) - 文件(
File
) - 數(shù)據(jù)庫(kù)(如
SQL Server
、MySQL
) - 云存儲(chǔ)(如
Azure Blob Storage
、AWS S3
) - 日志聚合工具(如
Elasticsearch
、Seq
)
安裝Serilog
在 C#
項(xiàng)目中使用 Serilog
,首先需要安裝相關(guān)的 NuGet
包。以下是一些常用的 Serilog
包:
Serilog
:核心日志庫(kù)。Serilog.Sinks.Console
:將日志輸出到控制臺(tái)。Serilog.Sinks.File
:將日志輸出到文件。Serilog.Sinks.MSSqlServer
:將日志輸出到SQL Server
數(shù)據(jù)庫(kù)。Serilog.Settings.Configuration
:通過(guò)配置文件(如appsettings.json
)配置Serilog
。
可以通過(guò)NuGet
包管理器安裝這些包。
配置Serilog
程序代碼中配置
在代碼中直接配置 Serilog
是最直接的方式。以下是一個(gè)簡(jiǎn)單的示例:
using Serilog; using Serilog.Sinks.File; class Program { static void Main(string[] args) { // 配置日志 Log.Logger = new LoggerConfiguration() .MinimumLevel.Debug() // 設(shè)置最低日志級(jí)別 .WriteTo.Console() // 輸出到控制臺(tái) .WriteTo.File("logs/log.txt", rollingInterval: RollingInterval.Day) // 輸出到文件,按天滾動(dòng) .CreateLogger(); // 寫入日志 Log.Information("This is an information message."); Log.Warning("This is a warning message."); Log.Error("This is an error message."); // 關(guān)閉日志 Log.CloseAndFlush(); } }
通過(guò)配置文件配置
Serilog
也支持通過(guò)配置文件(如 appsettings.json
)進(jìn)行配置,這種方式更加靈活。首先需要安裝 Serilog.Settings.Configuration
包:
然后在 appsettings.json
文件中配置 Serilog
:
{ "Serilog": { "MinimumLevel": "Debug", "WriteTo": [ { "Name": "Console" }, { "Name": "File", "Args": { "path": "logs/log.txt", "rollingInterval": "Day" } } ] } }
在程序中加載配置文件并初始化 Serilog
:
using Microsoft.Extensions.Configuration; using Serilog; class Program { static void Main(string[] args) { // 加載配置文件 var configuration = new ConfigurationBuilder() .AddJsonFile("appsettings.json") .Build(); // 配置 Serilog Log.Logger = new LoggerConfiguration() .ReadFrom.Configuration(configuration) .CreateLogger(); // 寫入日志 Log.Information("This is an information message."); Log.Warning("This is a warning message."); Log.Error("This is an error message."); // 關(guān)閉日志 Log.CloseAndFlush(); } }
常見(jiàn)配置選項(xiàng)
日志級(jí)別
可以通過(guò) MinimumLevel
設(shè)置最低日志級(jí)別,低于該級(jí)別的日志將不會(huì)被記錄。例如:
Log.Logger = new LoggerConfiguration() .MinimumLevel.Warning() // 只記錄 Warning 及以上級(jí)別的日志 .CreateLogger();
文件日志
文件日志是常用的日志輸出方式。Serilog
提供了豐富的文件日志配置選項(xiàng),例如:
- 文件路徑:指定日志文件的存儲(chǔ)路徑。
- 滾動(dòng)策略:按時(shí)間(如按天、按小時(shí))或大小滾動(dòng)日志文件。
- 保留策略:設(shè)置保留的日志文件數(shù)量或天數(shù)。
Log.Logger = new LoggerConfiguration() .WriteTo.File("logs/log.txt", rollingInterval: RollingInterval.Day, retainedFileCountLimit: 7) .CreateLogger();
控制臺(tái)日志
控制臺(tái)日志可以實(shí)時(shí)顯示日志信息,方便調(diào)試。可以通過(guò)以下方式配置控制臺(tái)日志:
Log.Logger = new LoggerConfiguration() .WriteTo.Console(outputTemplate: "[{Timestamp:HH:mm:ss} {Level}] {Message}{NewLine}{Exception}") .CreateLogger();
其中,outputTemplate
可以自定義日志的輸出格式。
數(shù)據(jù)庫(kù)日志
Serilog
支持將日志輸出到多種數(shù)據(jù)庫(kù),例如 SQL Server
、MySQL
等。以下是將日志輸出到 SQL Server
數(shù)據(jù)庫(kù)的示例:
Log.Logger = new LoggerConfiguration() .WriteTo.MSSqlServer( connectionString: "Server=your_server;Database=your_database;User Id=your_user;Password=your_password;", tableName: "Logs", autoCreateSqlTable: true) .CreateLogger();
在數(shù)據(jù)庫(kù)中,Serilog
會(huì)自動(dòng)創(chuàng)建一個(gè)日志表(如 Logs
),并存儲(chǔ)日志信息。
使用Serilog在ASP.NET Core中
Serilog
也可以與 ASP.NET Core
集成,為 Web
應(yīng)用程序提供日志功能。以下是一個(gè)集成的示例:
安裝NuGet包
安裝以下 NuGet
包:
Serilog.AspNetCore
Serilog.Sinks.Console
Serilog.Sinks.File
配置Serilog
在 Program.cs
文件中配置 Serilog
using Serilog; var builder = WebApplication.CreateBuilder(args); // 配置 Serilog Log.Logger = new LoggerConfiguration() .MinimumLevel.Debug() .WriteTo.Console() .WriteTo.File("logs/log.txt", rollingInterval: RollingInterval.Day) .CreateLogger(); builder.Host.UseSerilog(); var app = builder.Build(); app.MapGet("/", () => "Hello World!"); app.Run();
在 ASP.NET Core
中,Serilog
會(huì)自動(dòng)記錄應(yīng)用程序的生命周期事件(如啟動(dòng)、停止)以及中間件的日志。
日志上下文
Serilog
支持日志上下文,可以在日志中添加上下文信息,例如用戶 ID、請(qǐng)求 ID 等。以下是一個(gè)示例:
using Serilog; using Serilog.Context; Log.Logger = new LoggerConfiguration() .WriteTo.Console() .CreateLogger(); using (LogContext.PushProperty("UserId", 12345)) { Log.Information("User {UserId} performed an action.", 12345); }
在日志中,UserId
將作為上下文信息被記錄。
總結(jié)
Serilog
是一個(gè)功能強(qiáng)大且靈活的日志庫(kù),適用于各種 .NET
應(yīng)用程序。它支持多種日志輸出目標(biāo)和豐富的配置選項(xiàng),可以滿足不同的日志需求。通過(guò)合理配置 Serilog
,可以方便地記錄應(yīng)用程序的運(yùn)行日志,幫助開(kāi)發(fā)人員進(jìn)行調(diào)試和問(wèn)題排查。
到此這篇關(guān)于C# Serilog 日志的使用小結(jié)的文章就介紹到這了,更多相關(guān)C# Serilog 日志內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#序列化與反序列化集合對(duì)象并進(jìn)行版本控制
這篇文章介紹了C#序列化與反序列化集合對(duì)象并實(shí)現(xiàn)版本控制的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-09-09C#操作SQLite數(shù)據(jù)庫(kù)方法小結(jié)(創(chuàng)建,連接,插入,查詢,刪除等)
這篇文章主要介紹了C#操作SQLite數(shù)據(jù)庫(kù)方法,包括針對(duì)SQLite數(shù)據(jù)庫(kù)的創(chuàng)建,連接,插入,查詢,刪除等操作,并提供了一個(gè)SQLite的封裝類,需要的朋友可以參考下2016-07-07C# 編碼好習(xí)慣,獻(xiàn)給所有熱愛(ài)c#的同志
c#編寫者,需要培養(yǎng)的一些好習(xí)慣2009-02-02一篇文章教會(huì)你用Unity制作網(wǎng)格地圖生成組件
網(wǎng)格地圖這個(gè)功能在策略型游戲中應(yīng)用比較廣泛,基本情況下會(huì)將地圖分割成正方形網(wǎng)格或者六邊形網(wǎng)格,這篇文章主要給大家介紹了如何通過(guò)一篇文章學(xué)會(huì)用Unity制作網(wǎng)格地圖生成組件的相關(guān)資料,需要的朋友可以參考下2021-08-08C#原型模式之如何通過(guò)克隆對(duì)象來(lái)優(yōu)化創(chuàng)建過(guò)程
原型模式是一種創(chuàng)建型設(shè)計(jì)模式,通過(guò)克隆現(xiàn)有對(duì)象來(lái)創(chuàng)建新對(duì)象,避免重復(fù)的創(chuàng)建成本和復(fù)雜的初始化過(guò)程,它適用于對(duì)象創(chuàng)建過(guò)程復(fù)雜、需要大量相似對(duì)象或避免重復(fù)初始化的場(chǎng)景,本文介紹C#原型模式之如何通過(guò)克隆對(duì)象來(lái)優(yōu)化創(chuàng)建過(guò)程,感興趣的朋友一起看看吧2025-03-03c# Newtonsoft.Json 常用方法總結(jié)
這篇文章主要介紹了c# Newtonsoft.Json 常用方法的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下2021-02-02C#中泛型舉例List<T>與DataTable相互轉(zhuǎn)換
這篇文章介紹了C#中泛型舉例List<T>與DataTable相互轉(zhuǎn)換的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05