.NET Core 中的 Logging 簡單實用 - 記錄日誌訊息顯示到控制檯
阿新 • • 發佈:2021-08-05
.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 的實用,這裡暫時不展開說明,
從程式碼中可以看出, 通過建構函式注入的方式,注入了 ILoggerExecuteAsync
的時候直接使用 _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);
我們改造一下 HostRunner
中 ExecuteAsync
的程式碼
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 | 不用於寫入日誌訊息。 指定日誌記錄類別不應寫入任何訊息。 |