總結:利用asp.net core日誌進行生產環境下的錯誤排查(asp.net core version 2.2,用IIS作服務器)

概述css

調試asp.net core程序時,在輸出窗口中,在輸出來源選擇「調試」或「xxx-ASP.NET Core Web服務器」時,能夠看到相似「info:Microsoft.AspNetCore.Hosting.Internal.WebHost[2] Request finished in 285.6ms 200 text/css」這樣的內容,這就是asp.net core的日誌git

若是出現了未捕獲的異常,在輸出窗口中能夠看到出錯信息,如:fail: Microsoft.AspNetCore.Server.Kestrel[13]……An unhandled exception was thrown by the application. System.NullReferenceException: 未將對象引用設置到對象的實例。在……行號 xx 在……行號 xxgithub

若是在生產環境中能夠把這些出錯信息保存下來,將對排查代碼錯誤頗有幫助。web

代碼發佈後,能夠看到一個web.config文件,其中有一個aspNetCore標籤,把stdoutLogEnabled屬性設置爲true。這樣,在網站運行後,默認會在/logs文件夾下產生一個stdout_xxx_xxx.log的文件,日誌會保存到這裏面。json

 

控制日誌數量服務器

修改appsettings.json中的Logging/LogLevel/Default值。日誌級別從低到高爲Trace 、Debug 、Information 、Warning 、Error 、Critical 、None。級別越低,輸出的日誌越多。若是僅想輸出錯誤信息,可把級別設置成Error。若是把級別設置成None,將會阻止全部級別的日誌輸出。app

值得注意的時,在網站運行狀態下,修改appsettings.json中的上述配置,不會形成網站重啓(而修改web.config會形成網站重啓),但對日誌級別的控制會當即生效。asp.net

 

添加web.config到源代碼項目中ide

新建的asp.net core 2.2項目,默認沒有web.config文件。能夠經過「添加」、「新建項」、「Web配置文件」的方式手動添加。這樣就能夠在源碼項目中設定web.config的內容了。網站

 

使日誌包含時間

一、安裝nuget包LoggingAdvanced.Console

二、修改Program.cs的CreateWebHostBuilder方法,在其中的方法調用鏈的最後,調用ConfigureLogging方法,修改後的代碼以下:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
                .ConfigureLogging((hostingContext, loggingBuilder) =>
                 {
                     loggingBuilder.ClearProviders();//清除全部提供程序

                     loggingBuilder.AddDebug();//添加Debug提供程序

                     loggingBuilder.AddEventSourceLogger();//添加EventSource提供程序

                     var loggingSection = hostingContext.Configuration.GetSection("Logging");

                     loggingBuilder.AddConsoleAdvanced(loggingSection);//添加LoggingAdvanced.Console提供程序
                 });

三、修改appsettings.json的中的Logging部分,修改後以下:

"Logging": {
    "IncludeTimestamp": true,
    "IncludeLogNamespace": true,
    "TimestampPolicy": {
      "TimeZone": "Ulaanbaatar Standard Time",
      "Format": "yyyy/MM/dd HH:mm:ss.fff"
    },
    "LogLevel": {
      "Default": "Warning"
    }
  }

 

參考資料

一、有關「日誌提供程序」、「日誌級別」、「日誌篩選」等概念,請參考官方文檔:Logging in .NET Core and ASP.NET Core

二、LoggingAdvanced.Console

相關文章
相關標籤/搜索