經過前幾篇文章的講解,初步瞭解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/
本文版權歸作者和博客園共有,寫文不易,支持原創,歡迎轉載【點贊】,轉載請保留此段聲明,且在文章頁面明顯位置給出原文連接,謝謝。
關註個人公眾號,定時同步更新技術及職場文章