1. 程式人生 > 其它 >.NET Core 中的 Logging 簡單實用 - 記錄日誌訊息顯示到控制檯

.NET Core 中的 Logging 簡單實用 - 記錄日誌訊息顯示到控制檯

.NET Core 支援適用於各種內建和第三方日誌記錄提供程式的日誌記錄 API。 本文介紹瞭如何將日誌記錄 API 與內建提供程式一起使用。
本文中所述的大多數程式碼示例都來自 .Net 5 應用。

首先建立一個控制檯引用程式

建立 HostRunner 類 並注入 ILogger 物件

using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using System.Threading;
using System.Threading.Tasks;

namespace DotNetLoggingDemo
{
    public class HostRunner : BackgroundService
    {
        private readonly ILogger<HostRunner> _logger;

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

        protected override Task ExecuteAsync(CancellationToken stoppingToken)
        {
            _logger.LogInformation("這是日誌訊息");
            return Task.CompletedTask;
        }
    }
}

可以看出 HostRunner 類中的程式碼非常簡單。
首先 HostRunner 繼承自 BackgroundService,對於 BackgroundService 的實用,這裡暫時不展開說明,
從程式碼中可以看出, 通過建構函式注入的方式,注入了 ILogger, 使用方式也很簡單,我們在重寫函式 ExecuteAsync 的時候直接使用 _logger.LogInformation 函式即可記錄一條日誌級別為 Information 的日誌訊息。

接下來在 Program 中寫入如下程式碼

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;

namespace DotNetLoggingDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            //Console.WriteLine("Hello World!");

            CreateHostBuilder(args).Build().Run();
        }

        static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
            .ConfigureLogging(config =>
            {
                config.AddConsole();
            })
            .ConfigureServices((context, service) =>
            {
                service.AddHostedService<HostRunner>();
            });
    }
}

我們建立了一個泛型主機,並配置日誌記錄輸出到控制檯中,到現在,所有的程式碼就寫完了

下面執行看一下執行效果:

日誌訊息的記錄可以使用訊息模版,每個日誌 API 都使用一個訊息模板。 訊息模板可包含要填寫引數的佔位符。 注意,佔位符中使用名稱而不是數字。

string p1 = "param1";
string p2 = "param2";
_logger.LogInformation("Parameter values: {p2}, {p1}", p1, p2);

我們改造一下 HostRunnerExecuteAsync 的程式碼

using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using System.Threading;
using System.Threading.Tasks;

namespace DotNetLoggingDemo
{
    public class HostRunner : BackgroundService
    {
        private readonly ILogger<HostRunner> _logger;

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

        protected override Task ExecuteAsync(CancellationToken stoppingToken)
        {
            int count = 10;
            for (int i = 0; i < count; i++)
            {
                Thread.Sleep(100);
                _logger.LogInformation("這是日誌訊息 {序號}/{總數}。", i, count);

            }
            return Task.CompletedTask;
        }
    }
}

執行看一下效果:

下面列舉了所有的日誌級別

級別 方法 描述
Trace 0 LogTrace 描述不可恢復的應用程式/系統崩潰或需要立即引起注意的災難性故障的日誌。
Debug 1 LogDebug 在開發過程中用於互動式調查的日誌。 這些日誌應主要包含對除錯有用的資訊,並且沒有長期價值。
Information 2 LogInformation 跟蹤應用程式的常規流的日誌。 這些日誌應具有長期價值。
Warning 3 LogWarning 突出顯示應用程式流中的異常或意外事件(不會導致應用程式執行停止)的日誌。
Error 4 LogError 當前執行流因故障而停止時突出顯示的日誌。 這些日誌指示當前活動中的故障,而不是應用程式範圍內的故障。
Critical 5 LogCritical 描述不可恢復的應用程式/系統崩潰或需要立即引起注意的災難性故障的日誌。
None 6 不用於寫入日誌訊息。 指定日誌記錄類別不應寫入任何訊息。