asp.net core 系列 13 日志


一.概述

  ASP.NET Core 支持適用於各種內置和第三方日志記錄, 供程序的日志記錄 API,本文介紹了如何將日志記錄 API 與內置提供程序一起使用。對於第三方日志記錄提供程序使用,文章最后有鏈接。

 

  1.1 添加內置日志提供程序

    日志記錄提供程序能夠用於顯示日志信息或存儲日志,比如控制台提供程序在控制台上顯示日志,Azure Application Insights 提供程序會將這些日志存儲在 Azure Application Insights 中。 可通過添加多個提供程序將日志發送到多個目標。

    要添加提供程序,請在 Program.cs 中調用提供程序的 Add{provider name} 擴展方法:

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .ConfigureAppConfiguration((hostingContext, config) =>
                {
                    config.SetBasePath(Directory.GetCurrentDirectory());
                    config.AddJsonFile("starship.json", false, true);
                })
               .ConfigureLogging((hostingContext, logging) =>
              {
                  //日志的 默認記錄提供程序
                  //添加appsettings.json中關於日志的Logging節點配置
                  logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
                  //日志控制台記錄提供程序
                  logging.AddConsole();
                  //日志Debug記錄提供程序
                  logging.AddDebug();
                  //日志EventSource 記錄提供程序
                  logging.AddEventSourceLogger();
              })
                .UseStartup<Startup>();

    默認項目模板調用 CreateDefaultBuilder 擴展方法,該操作將添加以上日志記錄提供程序(控制台,Debug,EventSource):

    WebHost.CreateDefaultBuilder(args)

    如果要自行選擇提供程序來替換默認提供程序。 可以調用 ClearProviders,然后再添加所需的提供程序。

        public static IWebHost BuildWebHost(string[] args) =>
         WebHost.CreateDefaultBuilder(args)
        .UseStartup<Startup>()
        .ConfigureLogging(logging =>
        {
            logging.ClearProviders();
            //只有日志控制台記錄提供程序
            logging.AddConsole();
        })
        .Build();

    

  1.2  創建日志

    從 DI 中獲取 ILogger<TCategoryName> 對象。以下 Razor 頁面示例會創建日志“級別”為 Warning,“T類別”為 Page2Model,的日志:

    public class Page2Model : PageModel
    {
        private readonly ILogger _logger;

        public Page2Model(ILogger<Page2Model> logger)
        {
            _logger = logger;
        }

        public void OnGet()
        {
            _logger.LogWarning("Load the Page2");
        }
    }

    如下所示(vs- -調試--窗口):

 

   1.3 啟動Startup時創建日志

    要將日志寫入 Startup 類,構造函數簽名需包含 ILogger 參數:

        public class Startup
    {
        private readonly ILogger _logger;

        public Startup(IConfiguration configuration, ILogger<Startup> logger)
        {
            Configuration = configuration;
            _logger = logger;
        }
    }

    

  1.4  在Program中創建日志

    public static void Main(string[] args)
    {
      var host = BuildWebHost(args);
      var logger = host.Services.GetRequiredService<ILogger<Program>>();
      logger.LogInformation("Seeded the database.");

      host.Run();
    }

 

  1.5   日志配置Configuration

     日志記錄提供程序配置由一個或多個配置提供程序提供,它們可以是:

           (1)文件格式(INI、JSON 和 XML)。

           (2)命令行參數。

           (3)環境變量。

           (4)內存中的 .NET 對象。

           (5)未加密的機密管理器存儲。

           (6)加密的用戶存儲,如 Azure Key Vault。

           (7)(已安裝或已創建的)自定義提供程序。

    例如,日志記錄配置通常由應用設置文件的 Logging 節點部分提供。 以下示例應用了典型 appsettings.Development.json 文件的內容:

    {
     "Logging": {
        "LogLevel": {
          "Default": "Debug",
          "System": "Information",
          "Microsoft": "Information"
    },
      "Console":
      {
        "IncludeScopes": true
      }
    }
  }

    上面的配置文件不需要使用顯示加config.AddJsonFile,這個在環境章節已講過,當程序的環境(ASPNETCORE_ENVIRONMENT)是Development時,該文件中的Logging節點配置生效。

    Logging 下的 LogLevel 屬性指定了用於記錄所選類別的最低級別,在本例中,System 和 Microsoft類別在 Information 級別記錄,其他均在 Debug 級別記錄。

    Logging 下的其他屬性均指定了日志記錄提供程序。 本示例針對控制台提供程序。 如果提供程序支持日志作用域,則 IncludeScopes 將指示是否啟用這些域.

   

  1.6 日志級別

    每個日志都指定了一個 LogLevel 值。 日志級別指示嚴重性或重要程度。如果LogLevel是Warning級別,那么跟蹤Trace  ,Debug ,Information 級別將不會記錄。

    ASP.NET Core 定義了以下日志級別(按嚴重性從低到高排列): 

         (1) 跟蹤Trace = 0

         (2) 調試Debug = 1

         (3) 信息 Information = 2

         (4) 警告 Warning = 3

         (5) 錯誤 Error = 4

         (6) 嚴重 Critical = 5

 

  1.7 內置日志記錄提供程序

    (1) 控制台

           logging.AddConsole(); dotnet run 查看控制台日志記錄輸出。  

    (2) 調試

           logging.AddDebug(); 在 Linux 中,此提供程序將日志寫入 /var/log/message

    (3) EventSource

           logging.AddEventSourceLogger(); 在 Windows 中,它使用 PerfView 實用工具收集和查看日志,但尚無支持 Linux 或 macOS 的事件集合和顯示工具。

    (4) EventLog

          logging.AddEventLog();向 Windows 事件日志發送日志輸出

    (5) TraceSource

           logging.AddTraceSource(sourceSwitchName);應用必須在 .NET Framework(而非 .NET Core)上運行。

 

  1.8 第三方日志記錄提供程序

         適用於 ASP.NET Core 的第三方日志記錄框架,鏈接地址官方文檔中有:

           elmah.io(GitHub 存儲庫)

           Gelf(GitHub 存儲庫)

           JSNLog(GitHub 存儲庫)

           KissLog.net(GitHub 存儲庫)

           Loggr(GitHub 存儲庫)

           NLog(GitHub 存儲庫)

           Sentry(GitHub 存儲庫)

           Serilog(GitHub 存儲庫)

           Stackdriver(Github 存儲庫)

    例如使用NLog

      NLog是一個靈活的免費日志記錄平台,適用於各種.NET平台,包括.NET標准。NLog可以輕松寫入多個 目標。(數據庫,文件,控制台)並即時更改日志記錄配置。

 

  總結:

    這篇主要講了asp.net core內置的日志提供程序,  內置的日志自帶功能還是有限,比如不能寫入到.txt文件或數據庫中。在項目使用中還是要考慮使用第三方日志提供程序。本篇對於內置的日志提供程序還有:日志消息模板、日志作用域、Azure 中的日志記錄、日志事件 ID等未介紹,具體再參考官方文檔。

 

  參考文獻

  官方資料:asp.net core 日志

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM