C# 使用Serilog日志框架的方法
Serilog是一款配置方便,使用靈活的日志框架,使用方法如下:
1、日志輸出到控制臺(tái),需要使用Nuget安裝Serilog和Serilog.Sinks.Console兩個(gè)包
// 初始化日志的共享實(shí)例
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.Enrich.FromLogContext()
.WriteTo.Console()
.CreateLogger();
// 寫(xiě)入日志
Log.Information("Info");2、日志輸出到文件,需要安裝Serilog.Sinks.File包
// 初始化日志的共享實(shí)例
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.Enrich.FromLogContext()
.WriteTo.File("logs/app.log",
rollingInterval: RollingInterval.Day, // 每天一個(gè)日志文件
shared: true // 允許其他進(jìn)程共享日志文件
).CreateLogger();
// 寫(xiě)入日志
Log.Information("Info");3、可以通過(guò)配置,讓不同日志級(jí)別輸出到不同的日志文件
// 初始化日志的共享實(shí)例
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.Enrich.FromLogContext()
// 調(diào)試日志
.WriteTo.Logger(x => x
.Filter.ByIncludingOnly(e => e.Level == Serilog.Events.LogEventLevel.Debug)
.WriteTo.File("logs/debug.log", rollingInterval: RollingInterval.Day, shared: true)
// 錯(cuò)誤日志
).WriteTo.Logger(x => x
.Filter.ByIncludingOnly(e => e.Level == Serilog.Events.LogEventLevel.Error)
.WriteTo.File("logs/error.log", rollingInterval: RollingInterval.Day, shared: true)
// 應(yīng)用日志
).WriteTo.Logger(x => x
.Filter.ByIncludingOnly(e => e.Level != Serilog.Events.LogEventLevel.Debug &&
e.Level != Serilog.Events.LogEventLevel.Error)
.WriteTo.File("logs/app.log", rollingInterval: RollingInterval.Day, shared: true)
).CreateLogger();
// 寫(xiě)入日志到 app.log
Log.Information("Info");
// 寫(xiě)入日志到 debug.log
Log.Debug("Debug");
// 寫(xiě)入日志到 error.log
Log.Error("Error");4、寫(xiě)入日志到SqlServer
// 寫(xiě)入數(shù)據(jù)庫(kù)的配置
var sinkOpts = new MSSqlServerSinkOptions();
sinkOpts.TableName = "logs"; // 日志表名
sinkOpts.AutoCreateSqlTable = true; // 自動(dòng)創(chuàng)建表
// 列配置
var columnOpts = new ColumnOptions();
columnOpts.Store.Remove(StandardColumn.Exception); // 去掉異常列
columnOpts.Store.Remove(StandardColumn.Properties); // 去掉屬性列
columnOpts.Exception.DataLength = 2048; // 指定列的長(zhǎng)度
columnOpts.TimeStamp.NonClusteredIndex = true; // 去掉時(shí)間戳的聚集索引
// 初始化日志的共享實(shí)例
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.Enrich.FromLogContext()
.WriteTo.MSSqlServer(
connectionString: ConfigurationManager.ConnectionStrings["Default"].ConnectionString,
sinkOptions: sinkOpts,
columnOptions: columnOpts
).CreateLogger();
// 寫(xiě)入日志
Log.Information("Info");執(zhí)行代碼后,發(fā)現(xiàn)日志表并沒(méi)有添加到數(shù)據(jù)庫(kù),也沒(méi)有任何異常信息,我們可以添加以下代碼調(diào)試Serilog
Serilog.Debugging.SelfLog.Enable(msg =>
{
Debug.Print(msg);
Debugger.Break();
});獲取到如下的錯(cuò)誤信息:
2022-11-26T09:34:53.6107406Z Unable to write 1 log events to the database due to following error: A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 - 證書(shū)鏈?zhǔn)怯刹皇苄湃蔚念C發(fā)機(jī)構(gòu)頒發(fā)的。)
需要在連接字符串添加信任服務(wù)器證書(shū)的配置:TrustServerCertificate=True;
就能在SqlServer中創(chuàng)建日志表并寫(xiě)入日志。
到此這篇關(guān)于C# 使用Serilog日志框架的文章就介紹到這了,更多相關(guān)C# Serilog日志框架內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#替換Word文檔中的書(shū)簽內(nèi)容的詳細(xì)步驟
Word書(shū)簽不但可以幫助讀者快速跳轉(zhuǎn)到想要查看的位置,而且可以用做“占位符”,本文總結(jié)了一個(gè)將常見(jiàn)的Word文檔元素替換進(jìn)書(shū)簽的C#解決方案,希望對(duì)大家有所幫助2025-08-08
C#實(shí)現(xiàn)順序棧和鏈棧的代碼實(shí)例
今天小編就為大家分享一篇關(guān)于的C#實(shí)現(xiàn)順序棧和鏈棧的代碼實(shí)例,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-10-10
C#使用ZBar實(shí)現(xiàn)識(shí)別條形碼
目前主流的識(shí)別庫(kù)主要有ZXing.NET和ZBar,本文主要介紹的是如何使用ZBar庫(kù)實(shí)現(xiàn)識(shí)別條形碼功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2023-07-07
C#實(shí)現(xiàn)Word轉(zhuǎn)換TXT的方法詳解
這篇文章主要為大家詳細(xì)介紹了如何利用C#實(shí)現(xiàn)Word轉(zhuǎn)換TXT的功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下2022-12-12
C#調(diào)用halcon實(shí)現(xiàn)使用鼠標(biāo)滾輪對(duì)圖片進(jìn)行縮放顯示
這篇文章主要為大家詳細(xì)介紹了C#如何調(diào)用halcon實(shí)現(xiàn)使用鼠標(biāo)滾輪對(duì)圖片進(jìn)行縮放顯示,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-03-03
避免在C#循環(huán)中使用await的方法小結(jié)
在C#中,異步編程因其能夠提升應(yīng)用程序性能和響應(yīng)能力而變得越來(lái)越流行,async和await關(guān)鍵字使得編寫(xiě)異步代碼變得更加容易,但如果使用不當(dāng),它們也可能引入一些陷阱,所以本文我們將探討為什么應(yīng)該避免在C#循環(huán)中使用await,并討論一些更高效地處理異步操作的替代方法2024-09-09
C#實(shí)現(xiàn)根據(jù)指定容器和控件名字獲得控件的方法
這篇文章主要介紹了C#實(shí)現(xiàn)根據(jù)指定容器和控件名字獲得控件的方法,其中包括了遍歷與遞歸的應(yīng)用,需要的朋友可以參考下2014-08-08
C#數(shù)據(jù)結(jié)構(gòu)之順序表(SeqList)實(shí)例詳解
這篇文章主要介紹了C#數(shù)據(jù)結(jié)構(gòu)之順序表(SeqList)實(shí)現(xiàn)方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了順序表的定義、原理與具體實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11

