【開發技術】.Net中配置Serilog日志分級記錄

目錄

一、目的

二、解決方案

2.1 下載serilog包

2.2 Serilog配置

2.2.1?使用多個File sink配置不同的最小日志級別

2.2.2?使用Filter條件分流到不同文件

三、使用建議

四、文章總結


一、目的

? ? ? ? 在日常開發中,需要根據不同的場景去記錄日志,根據實際需求精細化控制日志輸出。避免所有類型的日志同時記錄在一個日志文件中,產生過多的冗余日志。在.Net開發中,常用的日志記錄,有Log4net,Nlog,Serilog等第三方日志庫。文章主要講解Serilog的日志分級記錄方式。

????????源碼地址:https://github.com/serilog/seriloghttps://github.com/serilog/serilog

????????支持按場景或組件設置不同日志級別,例如:

  • ??Debug??:僅記錄調試信息
  • ??Information??:記錄常規運行信息
  • ??Warning??:記錄潛在問題警告
  • ??Error??:記錄錯誤信息

二、解決方案

2.1 下載serilog包

dotnet add packages Serilog

(這是核心日志記錄庫,提供了結構化日志記錄的基礎功能,支持多種日志輸出方式和靈活的配置選項?。)

dotnet add packages Serilog.Sinks.Async

(這是一個擴展包,用于異步寫入日志,可以提高應用程序性能,避免日志記錄阻塞主線程?。)

dotnet add packages Serilog.Sinks.Console

(這個包用于將日志輸出到控制臺,方便開發調試時實時查看日志信息?。)

dotnet add packages Serilog.Sinks.File

(這個包用于將日志寫入文件,支持滾動日志文件(按時間或大小分割)等功能,適合生產環境使用?。)

2.2 Serilog配置

2.2.1?使用多個File sink配置不同的最小日志級別

var log = new LoggerConfiguration()// 信息級別日志.WriteTo.File("logs/information/log-.txt",restrictedToMinimumLevel: LogEventLevel.Information,rollingInterval: RollingInterval.Day)// 錯誤級別日志.WriteTo.File("logs/error/log-.txt",restrictedToMinimumLevel: LogEventLevel.Error,rollingInterval: RollingInterval.Day)// 調試級別日志.WriteTo.File("logs/debug/log-.txt",restrictedToMinimumLevel: LogEventLevel.Debug,rollingInterval: RollingInterval.Day).CreateLogger();

2.2.2?使用Filter條件分流到不同文件

using Serilog.Events;
using Serilog;
using System;
using System.IO;
using System.Reflection;
using System.Configuration;namespace Demo.Utils
{public class SerilogConfiguration{public static void Config(){//單個文件最大長度為3MBvar _fileSizeLimitBytes = 3 * 1024 * 1024;//初始化logger配置對象var LoggerConfiguration = new LoggerConfiguration();//根據配置文件內容確定日志初始化級別var loglevel = ConfigurationManager.AppSettings["loglevel"];//初始化配置var log = LoggerConfiguration.MinimumLevel.Debug().MinimumLevel.Override("Microsoft", LogEventLevel.Information).Enrich.FromLogContext().WriteTo.Logger(lc => lc.Filter.ByIncludingOnly(evt => evt.Level == LogEventLevel.Information).WriteTo.Async(x => x.File(Path.Combine(AppContext.BaseDirectory, "logs", DateTime.Now.ToString("yyyy-MM-dd"), "Information",$"{Assembly.GetExecutingAssembly().GetName().Name}-.txt"),rollingInterval: RollingInterval.Day,rollOnFileSizeLimit: true,fileSizeLimitBytes: _fileSizeLimitBytes,encoding: System.Text.Encoding.UTF8,retainedFileCountLimit: 30))).WriteTo.Logger(lc => lc.Filter.ByIncludingOnly(evt => evt.Level == LogEventLevel.Warning).WriteTo.Async(x => x.File(Path.Combine(AppContext.BaseDirectory, "logs", DateTime.Now.ToString("yyyy-MM-dd"), "Warning",$"{Assembly.GetExecutingAssembly().GetName().Name}-.txt"),rollingInterval: RollingInterval.Day,rollOnFileSizeLimit: true,fileSizeLimitBytes: _fileSizeLimitBytes,encoding: System.Text.Encoding.UTF8,retainedFileCountLimit: 30))).WriteTo.Logger(lc => lc.Filter.ByIncludingOnly(evt => evt.Level == LogEventLevel.Error).WriteTo.Async(x => x.File(Path.Combine(AppContext.BaseDirectory, "logs", DateTime.Now.ToString("yyyy-MM-dd"), "Error",$"{Assembly.GetExecutingAssembly().GetName().Name}-.txt"),rollingInterval: RollingInterval.Day,rollOnFileSizeLimit: true,fileSizeLimitBytes: _fileSizeLimitBytes,encoding: System.Text.Encoding.UTF8,retainedFileCountLimit: 30)));//查看Debug日志,根據配置文件考慮是否開放if (!string.IsNullOrEmpty(loglevel) && loglevel.Equals("0")){log = log.WriteTo.Logger(lc => lc.Filter.ByIncludingOnly(evt => evt.Level == LogEventLevel.Debug).WriteTo.Async(x => x.File(Path.Combine(AppContext.BaseDirectory, "logs", DateTime.Now.ToString("yyyy-MM-dd"), "Debug",$"{Assembly.GetExecutingAssembly().GetName().Name}-.txt"),rollingInterval: RollingInterval.Day,rollOnFileSizeLimit: true,fileSizeLimitBytes: _fileSizeLimitBytes,encoding: System.Text.Encoding.UTF8,retainedFileCountLimit: 30)));}//創建Serilog日志Log.Logger = log.CreateLogger();}}
}

ps:關鍵配置說明:
1.?? ?restrictedToMinimumLevel: 設置該sink接收的最小日志級別
2.?? ?rollingInterval: 設置日志文件滾動間隔(如每天)
3.?? ?Filter.ByIncludingOnly(): 使用表達式精確篩選要寫入的日志級別

三、使用建議

????????考慮使用appsettings.json配置,便于修改:

{"Serilog": {"WriteTo": [{"Name": "File","Args": {"path": "logs/information/log-.txt","restrictedToMinimumLevel": "Information","rollingInterval": "Day"}},{"Name": "File","Args": {"path": "logs/error/log-.txt","restrictedToMinimumLevel": "Error","rollingInterval": "Day"}}]}
}

?????????在 Program.cs 中讀取配置并初始化 Serilog

using Serilog;
using Microsoft.Extensions.Configuration;var configuration = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build();Log.Logger = new LoggerConfiguration().ReadFrom.Configuration(configuration).CreateLogger();Log.Information("Hello, Serilog with appsettings.json!");
Log.CloseAndFlush();

四、文章總結

????????Serilog 是一個功能強大的日志記錄庫,它提供了豐富的 API 和可插拔的輸出器及格式化器,使得開發者能夠輕松定制和擴展日志記錄功能。同時在學習新的技術的過程中,建議大家可以多看看源代碼,很多網絡上的內容可能環境和版本不同,不一定完全跑的通。共勉!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/93671.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/93671.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/93671.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

聊聊如何判斷發現的缺陷屬于前后端

目錄 一、觀察缺陷現象 二、檢查網絡請求(核心方法) 三、模擬請求驗證后端 四、查看日志 五、數據流分析 六、判斷前后端缺陷方法 判斷發現的缺陷是前后端,可以通過觀察缺陷現象,檢查網絡請求,查看后端日志&…

Python3與MySQL的PyMySQL連接與應用

Python3與MySQL的PyMySQL連接與應用 引言 隨著互聯網技術的飛速發展,數據庫在各個領域的應用日益廣泛。MySQL作為一種開源的關系型數據庫管理系統,因其穩定性和高效性,被廣泛應用于各種場景。Python作為一種高級編程語言,以其簡潔、易讀、易學等特點,受到了廣大開發者的…

智慧城市SaaS平臺|市政公用管理系統

【道路監測運維系統】1.數據可視化a) 實時監控支持對道路監測數據進行分析評估,為道路養護、交通管理、環境保護等提供數據支撐2.道路基礎設施監測支持對道路基礎設施的運行狀態進行實時監測,包括路面狀況3.交通流量監測支持對道路交通流量進行實時監測&…

Maven 配置阿里云鏡像加速

Maven 配置阿里云鏡像加速: 完整配置步驟(Windows 系統) 1. 找到 Maven 的 settings.xml 文件 全局配置:D:\software\apache-maven-3.9.11\conf\settings.xml用戶配置:C:\Users\Admin\.m2\settings.xml(推薦…

去除視頻字幕 3 : 繼續研究 IOPaint,記錄幾個問題

1. 為什么單獨運行,效果很好,批量運行,效果很差。 1. 我運行 iopaint start --modellama --devicecuda --port8080在瀏覽器中單獨選擇圖片,涂選區域,然后處理,此時的效果非常好。2. 但是我進行 iopaint ru…

【深度之眼機器學習筆記】04-01-決策樹簡介、熵,04-02-條件熵及計算舉例,04-03-信息增益、ID3算法

1. 決策樹與熵 1.1 決策樹簡介 下面有一個貸申請樣本表,有許多特征 我們根據特征數據生成一棵樹,比如年齡有青年,中年,老年三個類別,那么就有三個分支,分別對應著三種類別。如果是青年那么就看工作&#xf…

八股文場景題

如何預估接口上線后的 QPS 問題引入 這個問題其實是一個非常實際的問題,因為我們在開發需求后,例如:新增了一個接口 有一個步驟是值得做的,那就是預估這個接口的QPS 因為我們是可以去調配對應服務器的數量和運行配置的 例如我…

【Web安全】深入淺出理解“SQL注入-偽靜態注入”及空格限制繞過技巧

文章目錄什么是偽靜態注入?偽靜態注入中如何繞過空格限制?1. 用注釋符替代空格2. 用不可見字符(URL 編碼)替代3. 用括號分隔語句4. 用特殊符號替代核心邏輯往期文章【Web安全】一次性搞懂 ReDOS 漏洞原理/檢測/防御 【Web安全】一…

【讀論文】Step-Audio 2 深度解讀:邁向工業級語音交互的「全能型選手」

引言:step-Audio升級 語音交互技術,作為人機交互最自然、最直接的方式之一,正以前所未有的速度發展。從簡單的語音指令到流暢的語音對話,我們對 AI 的期望越來越高。然而,要讓 AI 真正成為我們的“知心伙伴”,僅僅能“聽懂”和“說出”還遠遠不夠。 一個理想的語音 AI,…

java web 重定向

目錄結構 demo\day20\src\com\demo\service\Dome1.javademo\day20\src\com\demo\service\Dome2.javademo\day20\src\com\demo\service\Dome3.javademo\day20\src\com\demo\service\Dome4.javademo\day20\web\WEB-INF\lib\javax.servlet.jardemo\day20\web\index.jspdemo\day20\…

MySQL(配置)——MariaDB使用

一、簡介 MariaDB 和 MySQL 作為兩個流行的關系型數據庫管理系統,它們的區別可以從多個角度來探討。盡管 MariaDB 最初是 MySQL 的一個分支,但隨著時間的推移,它們逐漸在功能、性能和開發方向上有所不同。MariaDB 是 MySQL 的一個分支&#x…

Web3:賽道劃分與發展趨勢解析

區塊鏈技術現在已經從單一的加密貨幣支付系統發展為涵蓋金融、藝術、組織治理和社區文化的多元生態系統。這次我們將深入解析 DeFi(去中心化金融)、NFT(非同質化代幣)、DAO(去中心化自治組織)與 MEME&#…

LeetCode 283 - 移動零

思路 使用雙指針法,一次遍歷完成原地修改。 慢指針 slow:指向下一個非零元素應該被放置的位置。快指針 fast:遍歷整個數組,尋找非零元素。 當 fast 遇到非零數時,將其值賦給 slow 指向的位置,然后 slow 前進…

8. 網絡層

在復雜的網絡環境中確定一個合適的路徑.1. IP協議1. 基本概念IP協議:提供一種能力(有非常大的概率,做到某事),把數據報從主機A,跨網絡,送到主機B --> 必須要有方式,標識通信兩端唯一性!&…

【通識】線性代數(Linear Algebra)

線性代數被廣泛應用于抽象代數和泛函分析中;通過解析幾何,線性代數能被具體表示,線性代數被泛化為算子理論。而非線性模型被近似為線性模型,應用場景多為自然科學和社會科學。 費馬和笛卡爾的工作,線性代數出現于十七世…

Qt 嵌入式界面優化技術

在嵌入式系統中,界面性能直接影響用戶體驗和系統穩定性。由于嵌入式設備通常資源受限(如低性能 CPU、有限內存、小尺寸屏幕),需針對性優化 Qt 界面以實現流暢顯示和高效交互。本文從渲染引擎、資源管理、布局優化到硬件加速&#…

去除視頻字幕 4 : 下一步,打算研究 Video Inpainting (視頻修復):

就是說,到現在,才算是真正開始,才發現真正的問題。 嘗試去除視頻上的字幕,使用 IOPaint, 效果很初級。。。問題描述 請幫我分析此時的效果。 此時的右側字幕區域,閃爍不停!我原本以為效果會很好。實際非常…

代碼隨想錄算法訓練營第五十五天|圖論part5

并查集理論基礎 初始化: void init() {for (int i 0; i < n; i) {father[i] i;} } 尋根&#xff1a; // 并查集里尋根的過程 int find(int u) {return u father[u] ? u : father[u] find(father[u]); // 路徑壓縮 } 判斷u跟v是否同根 // 判斷 u 和 v是否找到同一個根 b…

安卓模擬器 adb Frida hook 抓包

基本步驟 adb connect 127.0.0.1:62001adb forward tcp:27042 tcp:27042 adb forward tcp:27043 tcp:27043adb shell./data/local/tmp/frida-server再開啟cd D:\linuxdir\python\fridapython main.py下載夜神模擬 https://www.yeshen.com/ 安裝adb 點擊下載adb&#xff08…

編程與數學 03-002 計算機網絡 14_網絡性能分析

編程與數學 03-002 計算機網絡 14_網絡性能分析一、網絡性能指標&#xff08;一&#xff09;帶寬、時延、吞吐量等指標的定義與測量方法&#xff08;二&#xff09;性能指標對網絡應用的影響二、網絡性能的測試方法&#xff08;一&#xff09;使用網絡測試工具&#xff08;如Wi…