ASP.NET Core MVC 從入門到精通之日誌管理

来源:https://www.cnblogs.com/hsiang/archive/2023/06/19/17490006.html
-Advertisement-
Play Games

經過前幾篇文章的講解,初步瞭解ASP.NET Core MVC項目創建,啟動運行,以及命名約定,創建控制器,視圖,模型,接收參數,傳遞數據ViewData,ViewBag,路由,頁面佈局,wwwroot和客戶端庫,Razor語法,EnityFrameworkCore與資料庫,HttpContext,... ...


隨著技術的發展,ASP.NET Core MVC也推出了好長時間,經過不斷的版本更新迭代,已經越來越完善,本系列文章主要講解ASP.NET Core MVC開發B/S系統過程中所涉及到的相關內容,適用於初學者,在校畢業生,或其他想從事ASP.NET Core MVC 系統開發的人員。

經過前幾篇文章的講解,初步瞭解ASP.NET Core MVC項目創建,啟動運行,以及命名約定,創建控制器,視圖,模型,接收參數,傳遞數據ViewData,ViewBag,路由,頁面佈局,wwwroot和客戶端庫,Razor語法,EnityFrameworkCore與資料庫,HttpContext,Request,Response,Session,序列化,文件上傳,自動映射,Html輔助標簽,模型校驗,鑒權、授權基礎,Identity入門等內容,今天繼續講解ASP.NET Core MVC 中日誌等相關內容,僅供學習分享使用。

在實際系統開發中,日誌管理是非常重要的一個模塊,完整的日誌可以方便問題的跟蹤定位,可以快速的發現並解決問題。今天以一個簡單的小例子,簡述日誌組件NLog的基礎用法。

安裝NLog組件庫

首先通過Nuget包管理器,安裝NLog對應的日誌組件【NLog和NLog.Web.AspNetCore】,如下所示:

添加配置文件

在應用程式中添加NLog配置文件nlog.config,配置示例如下所示:

 1 <?xml version="1.0" encoding="utf-8" ?>
 2 <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
 3       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4       autoReload="true"
 5       internalLogLevel="Info"
 6       internalLogFile="c:\temp\internal-nlog-AspNetCore.txt">
 7 
 8     <!-- enable asp.net core layout renderers -->
 9     <extensions>
10         <add assembly="NLog.Web.AspNetCore"/>
11     </extensions>
12 
13     <!-- the targets to write to -->
14     <targets>
15         <!-- File Target for all log messages with basic details -->
16         <target xsi:type="File" name="allfile" fileName="c:\temp\nlog-AspNetCore-all-${shortdate}.log"
17                 layout="${longdate}|${event-properties:item=EventId:whenEmpty=0}|${level:uppercase=true}|${logger}|${message} ${exception:format=tostring}" />
18 
19         <!-- File Target for own log messages with extra web details using some ASP.NET core renderers -->
20         <target xsi:type="File" name="ownFile-web" fileName="c:\temp\nlog-AspNetCore-own-${shortdate}.log"
21                 layout="${longdate}|${event-properties:item=EventId:whenEmpty=0}|${level:uppercase=true}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}" />
22 
23         <!--Console Target for hosting lifetime messages to improve Docker / Visual Studio startup detection -->
24         <target xsi:type="Console" name="lifetimeConsole" layout="${MicrosoftConsoleLayout}" />
25     </targets>
26 
27     <!-- rules to map from logger name to target -->
28     <rules>
29         <!--All logs, including from Microsoft-->
30         <logger name="*" minlevel="Trace" writeTo="allfile" />
31 
32         <!--Output hosting lifetime messages to console target for faster startup detection -->
33         <logger name="Microsoft.Hosting.Lifetime" minlevel="Info" writeTo="lifetimeConsole, ownFile-web" final="true" />
34 
35         <!--Skip non-critical Microsoft logs and so log only own logs (BlackHole) -->
36         <logger name="Microsoft.*" maxlevel="Info" final="true" />
37         <logger name="System.Net.Http.*" maxlevel="Info" final="true" />
38 
39         <logger name="*" minlevel="Trace" writeTo="ownFile-web" />
40     </rules>
41 </nlog>

關於日誌組件配置說明,可參考官方文件:https://github.com/NLog/NLog/wiki/Configuration-file

註入日誌服務

在啟動程式Program.cs中,添加日誌組件服務,如下所示:

1 // NLog: Setup NLog for Dependency injection
2 builder.Logging.ClearProviders();
3 builder.Host.UseNLog();

日誌過濾器

在創建項目時,預設在appsettings.json創建日誌配置。如下所示:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*"
}

輸出日誌

在控制器中輸出日誌,需要用到ILogger<T>介面,可通過註入的方式實現,如下所示:

 1 using DemoCoreMVC.Models;
 2 using Microsoft.AspNetCore.Authorization;
 3 using Microsoft.AspNetCore.Mvc;
 4 using System.Diagnostics;
 5 
 6 namespace DemoCoreMVC.Controllers
 7 {
 8     public class HomeController : Controller
 9     {
10         private readonly ILogger<HomeController> _logger;
11 
12         public HomeController(ILogger<HomeController> logger)
13         {
14             _logger = logger;
15         }
16 
17         public IActionResult Index()
18         {
19             _logger.LogInformation("Hello, 這是首頁!");
20             return View();
21         }
22 
23 
24     }
25 }

日誌查看

查看日誌,通過打開日誌配置文件nlog.config中配置的路徑,生成了兩個對應的日誌,如下所示:

nlog-AspNetCore-all-2023-06-18.log中的日誌比較全,包含很多程式內部日誌。

nlog-AspNetCore-own-2023-06-18.log中的日誌比較簡約,如下所示:

日誌級別

在ASP.NET Core中,日誌級別共幾種,分別如下所示:

下表列出了 LogLevel 值、方便的 Log{LogLevel} 擴展方法以及建議的用法:

 在上表中,LogLevel 按嚴重性由低到高的順序列出。

修改配置級別

在實際生產程式中,一般日誌並不輸出Trace級別的日誌,Debug也是在調試開發時才用。預設情況下,生成的nlog-AspNetCore-all-2023-06-18.log會比較大,則可以通過參數配置來修改。

設置值minlevel="Info",則不會輸出Tracle和Debug級別的程式,如下所示:

 1 <!-- rules to map from logger name to target -->
 2 <rules>
 3     <!--All logs, including from Microsoft-->
 4     <logger name="*" minlevel="Info" writeTo="allfile" />
 5 
 6     <!--Output hosting lifetime messages to console target for faster startup detection -->
 7     <logger name="Microsoft.Hosting.Lifetime" minlevel="Info" writeTo="lifetimeConsole, ownFile-web" final="true" />
 8 
 9     <!--Skip non-critical Microsoft logs and so log only own logs (BlackHole) -->
10     <logger name="Microsoft.*" minlevel="Info" final="true" />
11     <logger name="System.Net.Http.*" minlevel="Info" final="true" />
12 
13     <logger name="*" minlevel="Info" writeTo="ownFile-web" />
14 </rules>

通過設置後,生成的日誌文件將會精簡很多,如下所示:

日誌輸出目標

日誌不僅可以輸出到控制台,也可以輸出到文件,或者其他媒介。

日誌輸出目標可通過targets進行配置。日誌可以配置多個輸出目標,通過target進行配置。

如下所示:

  • name  輸出目標名稱

  • type  輸出目標類型,如: "File", "Database", "Mail","Console". 用 xsi:type.表示

  • layout 輸出格式

如輸出到控制台,如通過如下配置:

1 <target xsi:type="Console" name="lifetimeConsole" layout="${MicrosoftConsoleLayout}" />

設置後,即可輸出到控制台,如下所示:

 以上就是ASP.NET Core MVC從入門到精通之日誌管理的全部內容。


作者:小六公子
出處:http://www.cnblogs.com/hsiang/
本文版權歸作者和博客園共有,寫文不易,支持原創,歡迎轉載【點贊】,轉載請保留此段聲明,且在文章頁面明顯位置給出原文連接,謝謝。
關註個人公眾號,定時同步更新技術及職場文章


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • # 前言 此文章是Java後端接入微信登錄功能,由於項目需要,捨棄瞭解密用戶信息的`session_key`,只保留`openid`用於檢索用戶信息 後端框架:spring boot 小程式框架:uniapp # 流程概括 - 官方流程:通過自定義登錄態與openid,session_key關聯,之 ...
  • ## 1 目標 不在現有查詢代碼邏輯上做任何改動,實現dao維度的數據源切換(即表維度) ## 2 使用場景 節約bdp的集群資源。接入新的寬表時,通常uat驗證後就會停止集群釋放資源,在對應的查詢伺服器uat環境時需要查詢的是生產庫的表數據(uat庫表因為bdp實時任務停止,沒有數據落入),只進行 ...
  • ## 教程簡介 Tapestry並不是一種單純的MVC框架,它更像MVC框架和模板技術的結合,它不僅包含了前端的MVC框架,還包含了一種視圖層的模板技術,使用Tapestry完全可以與Servlet/JSP API分離,是一種非常優秀的設計。 通過使用Tapestry,開發者完全不需要使用JSP技術 ...
  • `Comparable` 介面的 `compareTo` 方法的升序或降序取決於實現該介面的類的具體實現。按照慣例,`compareTo` 方法應該返回負數、零或正數來指示當前對象是小於、等於還是大於傳入的對象。具體來說: - 如果 `this` 對象小於傳入的對象,則 `compareTo` 應該 ...
  • # 1、概述 ## 功能 Elasticsearch 是一個分散式的 RESTful 搜索和分析引擎,可用來集中存儲您的數據,以便您對形形色色、規模不一的數據進行搜索、索引和分析。 例如: - 在電商網站搜索商品 ![image](https://img2023.cnblogs.com/blog/3 ...
  • # Java 運算符的使用 # 1.算術運算符 ## 算術運算符包括: +, -, *, /, %, ++, --,其中需要註意的是%,++,--; ## % 取模運算也叫做取餘,在 Java 中取餘的規則: a % b = a - a / b * b,如果是小數的話是這樣:a % b = a- ( ...
  • 為了更好的認識函數,我們還要研究值傳遞問題,再研究這個問題之前,我們已經知道了函數之間的值傳遞,是實參變數值傳遞給形參變數,然後讓形參變數在函數內完成相應的功能。但是因為數據類型的不同,這裡的值傳遞產生的對實參變數的效果是不同的 # 1.傳遞數據本質 參數傳遞之間傳遞的肯定是數據,而這種數據本質上是 ...
  • ## 一、概述 ### 1.什麼是多租戶架構? 多租戶架構是指在一個應用中支持多個租戶(Tenant)同時訪問,每個租戶擁有獨立的資源和數據,並且彼此之間完全隔離。通俗來說,多租戶就是把一個應用按照客戶的需求“分割”成多個獨立的實例,每個實例互不幹擾。 ### 2. 多租戶架構的優勢 - 更好地滿足 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...