隨著技術(shù)的發(fā)展,ASP.NET Core MVC也推出了好長時間,經(jīng)過不斷的版本更新迭代,已經(jīng)越來越完善,本系列文章主要講解ASP.NET Core MVC開發(fā)B/S系統(tǒng)過程中所涉及到的相關(guān)內(nèi)容,適用于初學(xué)者,在校畢業(yè)生,或其他想從事ASP.NET Core MVC 系統(tǒng)開發(fā)的人員。
經(jīng)過前幾篇文章的講解,初步了解ASP.NET Core MVC項目創(chuàng)建,啟動運(yùn)行,以及命名約定,創(chuàng)建控制器,視圖,模型,接收參數(shù),傳遞數(shù)據(jù)ViewData,ViewBag,路由,頁面布局,wwwroot和客戶端庫,Razor語法,EnityFrameworkCore與數(shù)據(jù)庫,HttpContext,Request,Response,Session,序列化,文件上傳,自動映射,Html輔助標(biāo)簽,模型校驗,鑒權(quán)、授權(quán)基礎(chǔ),Identity入門等內(nèi)容,今天繼續(xù)講解ASP.NET Core MVC 中日志等相關(guān)內(nèi)容,僅供學(xué)習(xí)分享使用。
在實(shí)際系統(tǒng)開發(fā)中,日志管理是非常重要的一個模塊,完整的日志可以方便問題的跟蹤定位,可以快速的發(fā)現(xiàn)并解決問題。今天以一個簡單的小例子,簡述日志組件NLog的基礎(chǔ)用法。
安裝NLog組件庫
首先通過Nuget包管理器,安裝NLog對應(yīng)的日志組件【NLog和NLog.Web.AspNetCore】,如下所示:
添加配置文件
在應(yīng)用程序中添加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>
關(guān)于日志組件配置說明,可參考官方文件:https://github.com/NLog/NLog/wiki/Configuration-file
注入日志服務(wù)
在啟動程序Program.cs中,添加日志組件服務(wù),如下所示:
1 // NLog: Setup NLog for Dependency injection 2 builder.Logging.ClearProviders(); 3 builder.Host.UseNLog();
日志過濾器
在創(chuàng)建項目時,默認(rèn)在appsettings.json創(chuàng)建日志配置。如下所示:
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "AllowedHosts": "*" }
輸出日志
在控制器中輸出日志,需要用到ILogger<T>接口,可通過注入的方式實(shí)現(xiàn),如下所示:
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中配置的路徑,生成了兩個對應(yīng)的日志,如下所示:
nlog-AspNetCore-all-2023-06-18.log中的日志比較全,包含很多程序內(nèi)部日志。
nlog-AspNetCore-own-2023-06-18.log中的日志比較簡約,如下所示:
日志級別
在ASP.NET Core中,日志級別共幾種,分別如下所示:
下表列出了?LogLevel?值、方便的?Log{LogLevel}
?擴(kuò)展方法以及建議的用法:
?在上表中,LogLevel
?按嚴(yán)重性由低到高的順序列出。
修改配置級別
在實(shí)際生產(chǎn)程序中,一般日志并不輸出Trace級別的日志,Debug也是在調(diào)試開發(fā)時才用。默認(rèn)情況下,生成的nlog-AspNetCore-all-2023-06-18.log會比較大,則可以通過參數(shù)配置來修改。
設(shè)置值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>
通過設(shè)置后,生成的日志文件將會精簡很多,如下所示:
日志輸出目標(biāo)
日志不僅可以輸出到控制臺,也可以輸出到文件,或者其他媒介。
日志輸出目標(biāo)可通過targets進(jìn)行配置。日志可以配置多個輸出目標(biāo),通過target進(jìn)行配置。
如下所示:
-
name
? 輸出目標(biāo)名稱 -
type
? 輸出目標(biāo)類型,如: "File", "Database", "Mail","Console". 用?xsi:type
.表示 -
layout 輸出格式
如輸出到控制臺,如通過如下配置:
1 <target xsi:type="Console" name="lifetimeConsole" layout="${MicrosoftConsoleLayout}" />
設(shè)置后,即可輸出到控制臺,如下所示:
文章來源:http://www.zghlxwxcb.cn/news/detail-490863.html
?以上就是ASP.NET Core MVC從入門到精通之日志管理的全部內(nèi)容。文章來源地址http://www.zghlxwxcb.cn/news/detail-490863.html
到了這里,關(guān)于ASP.NET Core MVC 從入門到精通之日志管理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!