日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

.NET6之MiniAPI(十九):NLog

發(fā)布時間:2023/12/4 asp.net 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .NET6之MiniAPI(十九):NLog 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在本系例文章的第八篇中,我們聊過官方的日志實現,即《.NET6之MiniAPI(八):日志》。但官方的日志功能更多是提供了一個實現基礎,對于要求一個靈活,強大,方便的日志體系,官方的還是有差距的,那么本篇就介紹一下NLog,這款強大,靈活,方便的日志庫,在MiniAPI中的使用。

直入主題,首先引入NeGut包

NLog.Web.AspNetCore

添加代碼實現很簡單

using NLog; using NLog.Web;//啟動日志 var logger = NLog.LogManager.Setup().LoadConfigurationFromAppSettings().GetCurrentClassLogger(); logger.Debug("init main"); try {var builder = WebApplication.CreateBuilder(args);//配置日志builder.Logging.ClearProviders();builder.Logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);builder.Host.UseNLog();var app = builder.Build();//使用日志app.MapGet("/logtest", () =>{app.Logger.LogTrace("LogTrace");app.Logger.LogDebug("LogDebug");app.Logger.LogWarning("LogWarning");app.Logger.LogInformation("LogInformation");app.Logger.LogError("LogError");app.Logger.LogCritical(new Exception("eLogCritical"), "LogCritical");return "logtest";});app.MapGet("/myvalue",?MyService.GetMyValue);app.Run(); } catch (Exception exception) {//異常時處理日志logger.Fatal(exception, "Stopped program because of exception"); } finally {NLog.LogManager.Shutdown(); }class MyService {public static string GetMyValue(ILogger<MyService> logger){logger.LogInformation("TestService.GetMyValue");return "MyValue";} }

NLog的真正方便,在配置的豐富,通過配置靈活地實現不日志方式,不同信息項目的采集。NLog的配置以nlog.config文件名保存在項目根目錄下,當然也可以通過修改啟動日志的LoadConfigurationFramAppSettings來配置nlog.config路徑。

配置主要通過targets節(jié)點和rules節(jié)點協助實現配置,targets主要是配置保存或顯示日志的方式,是txt文件,還json文件,以及l(fā)ayout中日志的內容,具體target的屬性,有很多,參見https://github.com/NLog/NLog/wiki/File-target。另外一個就是layout中,也就是將來的日志信息有那些元素,可參見https://nlog-project.org/config/?tab=layout-renderers。

rules主要是配置不同的功能模塊,日志級別等信息,參見https://github.com/nlog/nlog/wiki/Configuration-file#rules。

下面的案例配置,實現了官方模板自帶的allfile和ownFile-web兩個txt格式的模板,和一個jsonfile的模板,同時還有一個彩色控制臺模板(各個模板的屬性,官方文檔比較詳細,這里就不展開了)

<?xml version="1.0" encoding="utf-8" ?> <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"autoReload="true"internalLogLevel="Info"><!-- enable asp.net core layout renderers --><extensions><add assembly="NLog.Web.AspNetCore"/></extensions><!-- the targets to write to --><targets><!-- File Target for all log messages with basic details --><target xsi:type="File" name="allfile" fileName="${basedir}\logs\nlog-AspNetCore-all-${shortdate}.log"layout="${longdate}|${event-properties:item=EventId_Id:whenEmpty=0}|${level:uppercase=true}|${logger}|${message} ${exception:format=tostring}" /><!-- File Target for own log messages with extra web details using some ASP.NET core renderers --><target xsi:type="File" name="ownFile-web" fileName="${basedir}\logs\nlog-AspNetCore-own-${shortdate}.log"layout="${longdate}|${event-properties:item=EventId_Id:whenEmpty=0}|${level:uppercase=true}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}|${callsite}" /><!--json格式--><target name="jsonfile" xsi:type="File" fileName="${basedir}\logs\${shortdate}.json"><layout xsi:type="JsonLayout" includeAllProperties="true"><attribute name="time" layout="${date:format=O}" /><attribute name="message" layout="${message}" /><attribute name="logger" layout="${logger}"/><attribute name="level" layout="${level}"/><attribute name='exception' layout='${exception}' /><attribute name='request' encode='false' ><layout type='JsonLayout'><attribute name="aspnet-request-ip" layout="${aspnet-request-ip}"/><attribute name="aspnet-Request-Url" layout="${aspnet-Request-Url}"/><attribute name="aspnet-Request-Host" layout="${aspnet-Request-Host}"/><attribute name="aspnet-Request-Method" layout="${aspnet-Request-Method}"/></layout></attribute></layout></target><!--Console Target for hosting lifetime messages to improve Docker / Visual Studio startup detection --><target xsi:type="ColoredConsole" name="lifetimeConsole" layout="${MicrosoftConsoleLayout}" ><highlight-row condition="level == LogLevel.Error" backgroundColor="NoChange" foregroundColor="NoChange"/><highlight-row condition="level == LogLevel.Fatal" backgroundColor="NoChange" foregroundColor="NoChange"/><highlight-row condition="level == LogLevel.Warn" backgroundColor="NoChange" foregroundColor="NoChange"/><highlight-word text="info" condition="level == LogLevel.Info" backgroundColor="NoChange" foregroundColor="Green" ignoreCase="true" regex="info" wholeWords="true" compileRegex="true"/><highlight-word text="warn" condition="level == LogLevel.Warn" backgroundColor="NoChange" foregroundColor="Yellow" ignoreCase="true" regex="warn" wholeWords="true" compileRegex="true"/><highlight-word text="fail" condition="level == LogLevel.Error" backgroundColor="NoChange" foregroundColor="Red" ignoreCase="true" regex="fail" wholeWords="true" compileRegex="true"/><highlight-word text="crit" condition="level == LogLevel.Fatal" backgroundColor="NoChange" foregroundColor="DarkRed" ignoreCase="true" regex="crit" wholeWords="true" compileRegex="true"/></target></targets><!-- rules to map from logger name to target --><rules><!--All logs, including from Microsoft--><logger?name="*"?minlevel="Trace"?writeTo="allfile"?/><!--Output hosting lifetime messages to console target for faster startup detection --><logger?name="*"?minlevel="Trace"?writeTo="lifetimeConsole"?/><!--Skip non-critical Microsoft logs and so log only own logs (BlackHole) --><logger name="Microsoft.*" maxlevel="Info" final="true" /><logger name="System.Net.Http.*" maxlevel="Info" final="true" /><!--json格式--><logger?name="*"?minlevel="Trace"?writeTo="jsonfile"?/><logger name="*" minlevel="Trace" writeTo="ownFile-web" /></rules> </nlog>

這里的appsettings.jsons配置如下

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

根據配置,看看具體的實現效果:

控制臺結果

2022-02-20.json結果

nlog-AspNetCore-own-2022-02-20.log結果

nlog-AspNetCore-all-2022-02-20.log結果

總結

以上是生活随笔為你收集整理的.NET6之MiniAPI(十九):NLog的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。