1. <dd id="erndk"></dd>
                1. ASP.NET Core 2.1 : 十二.內置日志、使用Nlog將日志輸出到文件

                  FlyLolo 2019/9/4 11:31:15

                  應用離不開日志,雖然現在使用VS有強大的調試功能,開發過程中不復雜的情況懶得輸出日志了(想起print和echo的有木有),但在一些復雜的過程中以及應用日常運行中的日志還是非常有用。 ASP.NET Core提供了內置的日志,但沒弄明白這么把它輸出到文件, 只能在VS的輸出中查看, 誰知道怎么弄告訴

                    應用離不開日志,雖然現在使用VS有強大的調試功能,開發過程中不復雜的情況懶得輸出日志了(想起print和echo的有木有),但在一些復雜的過程中以及應用日常運行中的日志還是非常有用。

                    ASP.NET Core提供了內置的日志,但沒弄明白這么把它輸出到文件, 只能在VS的輸出中查看, 誰知道怎么弄告訴我一下。(ASP.NET Core 系列目錄) 本例 GitHub

                  一、內置日志的使用

                    上一篇:如何在后臺運行一個任務  中使用到了內置的日志,直接在構造中注入一下,然后直接使用即可, 非常方便

                          public TokenRefreshService(ILogger<TokenRefreshService> logger)
                          {
                              _logger = logger;
                          }
                  
                          protected override async Task ExecuteAsync(CancellationToken stoppingToken)
                          {
                              _logger.LogInformation("Service starting");
                             //************
                          }

                  然后在【輸出】窗口中就可以看到輸出的日志了:

                  想把它輸出到txt中, 沒找到相應的方法,試試常見的Nlog吧

                  二、使用Nlog將日志輸出到文件

                  A.安裝Nlog

                  在NuGet中搜索并安裝 NLog.Web.AspNetCore , 當前版本是4.5.4

                   B.添加配置文件

                  新建一個文件nlog.config, 并右鍵點擊其屬性,將其“復制到輸出目錄”設置為“始終復制”。文件內容如下

                  <?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"
                        throwConfigExceptions="true"
                        internalLogLevel="info"
                        internalLogFile="d:\log\internal-nlog.txt">
                  
                  
                    <!-- the targets to write to -->
                    <targets>
                      <!-- write logs to file  -->
                      <target xsi:type="File" name="allfile" fileName="d:\log\nlog-all-${shortdate}.log"
                              layout="${longdate}|${event-properties:item=EventId_Id:whenEmpty=0}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}" />
                  
                      <!-- another file log, only own logs. Uses some ASP.NET core renderers -->
                      <target xsi:type="File" name="ownFile-web" fileName="d:\log\nlog-own-${shortdate}.log"
                              layout="${longdate}|${event-properties:item=EventId_Id:whenEmpty=0}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}|${callsite}" />
                    </targets>
                  
                    <!-- rules to map from logger name to target -->
                    <rules>
                      <!--All logs, including from Microsoft-->
                      <logger name="*" minlevel="Trace" writeTo="allfile" />
                  
                      <!--Skip non-critical Microsoft logs and so log only own logs-->
                      <logger name="Microsoft.*" maxlevel="Info" final="true" />
                      <!-- BlackHole -->
                      <logger name="*" minlevel="Trace" writeTo="ownFile-web" />
                    </rules>
                  </nlog>

                  C.修改Program.cs文件

                   在 .UseStartup<Startup>() 后添加一句 .UseNLog() 

                  三、注意事項

                  按照第二節的描述,NLog已經可以正常使用了,有些細節做一下簡要說明:

                  1. 文件nlog.config的這個名字應該是默認讀取的文件名(官方建議全部小寫,linux系統中要注意),如果用了別的名字,可以在Program.cs文件中通過 ConfigureNLog 方法設置,見下面代碼示例。

                  2. 現在如第一節內置的例子中一樣, VS的輸出框仍然在輸入日志,也就是二者都在生效狀態,想只用Nlog,可以調用 logging.ClearProviders(); 

                  3. 注意輸出目錄的權限問題。

                  代碼示例:

                   1     public class Program
                      {
                          public static void Main(string[] args)
                          {
                              NLog.Web.NLogBuilder.ConfigureNLog("nlog1.config");  //假如沒有用默認的名字,多寫了一個1
                              CreateWebHostBuilder(args).Build().Run();
                          }
                  
                          public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
                              WebHost.CreateDefaultBuilder(args)
                                  .UseStartup<Startup>()
                                  .ConfigureLogging(logging =>
                                  {
                                      logging.ClearProviders(); //移除已經注冊的其他日志處理程序
                                      logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace); //設置最小的日志級別
                                  })
                                  .UseNLog();  
                      }

                   

                  四、NLog配置簡要說明

                      “簡要”的說一下NLog的配置:

                  1.上文提到了一個日志級別,這個級別大概分為6個,由低到高如下:

                  1 logger.LogTrace();
                  logger.LogDebug();
                  logger.LogInformation();
                  logger.LogWarning();
                  logger.LogError();
                  logger.LogCritical();

                  2. 通過上面的例子,看輸出的日志文件有3個, 這是在nlog.config中配置的, 通過文件名可以找到對應的配置。

                  •   internal-nlog 記錄了NLog的啟動及加載config的信息。
                  •   nlog-all 記錄了所有日志
                  •  nlog-own 記錄了我們自定義的日志

                  這是為什么呢?config中有兩個關鍵標簽<targets>和 <rules>

                  • <targets>   用于配置輸出相關內容,比如 type 屬性可選項為File、Mail、Console等,用于設置輸出目標,layout屬性用于設置輸出信息的組成元素及格式。
                  • <rules> : 這里有個坑,一看這個標簽,簡單理解成了“規則”,而恰好例子中的兩個<rule>正好對應了上面的兩個<target>,writeTo屬性指定了對應的<target>??勺屑氁豢?,兩個的<rule>配置差不多,為什么下面的一個就只輸出了我們自定義的log呢?看幫助才知道這是一個“路由表”,日志是從上到下匹配的。 <logger name="Microsoft.*" maxlevel="Info" final="true" /> 一句話的 final="true" 過濾掉了"Microsoft.*"的日志。

                   

                  隨時隨地學軟件編程-關注百度小程序和微信小程序
                  關于找一找教程網

                  本站文章僅代表作者觀點,不代表本站立場,所有文章非營利性免費分享。
                  本站提供了軟件編程、網站開發技術、服務器運維、人工智能等等IT技術文章,希望廣大程序員努力學習,讓我們用科技改變世界。
                  [ASP.NET Core 2.1 : 十二.內置日志、使用Nlog將日志輸出到文件]http://www.yachtsalesaustralia.com/tech/detail-90218.html

                  贊(0)
                  關注微信小程序
                  程序員編程王-隨時隨地學編程

                  掃描二維碼或查找【程序員編程王】

                  可以隨時隨地學編程啦!

                  技術文章導航 更多>
                  国产在线拍揄自揄视频菠萝

                        1. <dd id="erndk"></dd>