.NET 云原生架構(gòu)師訓(xùn)練營(模塊二 基礎(chǔ)鞏固 日志)--學(xué)習(xí)筆記
2.2.2 核心模塊--日志
ILogger 的使用
日志的 ID
日志的分類
日志的級別
LoggerProvider
日志的最佳實踐
.NET Core 和 ASP.NET Core 中的日志記錄:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/logging/?view=aspnetcore-5.0
ILogger 的使用
在 Get 方法中添加日志
WeatherForecastController.cs
private readonly ILogger _logger;
public WeatherForecastController(ILogger logger)
{
_logger = logger;
}
_logger.LogInformation("Get action executed");
日志的 ID
_logger.LogInformation(new EventId(1001, "Action"), "Get action executed");
日志的分類
根據(jù)不同的類名區(qū)分
private readonly ILogger _logger;
private readonly ILogger _myLogger;
public WeatherForecastController(ILogger logger, ILoggerFactory loggerFactory)
{
_logger = loggerFactory.CreateLogger();
_myLogger = loggerFactory.CreateLogger("MyLogger");// 通過自己的分類 MyLogger 創(chuàng)建
}
日志的級別
| LogLevel | Value | Method | Description | 推薦使用場景 |
|---|---|---|---|---|
| Trace | 0 | LogTrace | 跟蹤日志:粒度細(xì),非常詳細(xì)跟蹤日志,包括方法的進(jìn)入結(jié)束。一般是用于sdk、或者一些基礎(chǔ)設(shè)施上 | 開發(fā)環(huán)境/特殊環(huán)境 |
| Debug | 1 | LogDebug | 調(diào)試日志:記錄一些比較容易出錯的一些跟蹤信息 | 開發(fā)環(huán)境/特殊環(huán)境 |
| Information | 2 | LogInformation | 信息:生產(chǎn)級別開啟。相對來說比較重要的節(jié)點:比如訂單支付成功、取消成功 | 生產(chǎn) |
| Warning | 3 | LogWarning | 警告:有一定錯誤,但不影響結(jié)果執(zhí)行 | 生產(chǎn) |
| Error | 4 | LogError | 錯誤:導(dǎo)致程序不能正常往下執(zhí)行業(yè)務(wù)的錯誤 | 生產(chǎn) |
| Critical | 5 | LogCritical | 致命:記錄信息要求,系統(tǒng)崩潰 | 生產(chǎn) |
| None | 6 |
LoggerProvider
源碼:https://github.com/aspnet/Logging/tree/master/src/
ILoggerProvider.cs
using System;
namespace Microsoft.Extensions.Logging
{
///
/// Represents a type that can create instances of .
///
public interface ILoggerProvider : IDisposable
{
///
/// Creates a new instance.
///
/// The category name for messages produced by the logger.
///
ILogger CreateLogger(string categoryName);
}
}
日志的設(shè)計模式

支持不同類型的日志輸出,可以自定義一個 LoggerProvider
打印容器中所有注入的 LoggerProvider
Program.cs
var providers = host.Services.GetServices();// 獲取容器中所有注入的實例
foreach (var provider in providers)
{
Console.WriteLine(provider.GetType().ToString());
}
啟動程序,輸出如下:
Microsoft.Extensions.Logging.Console.ConsoleLoggerProvider
Microsoft.Extensions.Logging.Debug.DebugLoggerProvider
Microsoft.Extensions.Logging.EventSource.EventSourceLoggerProvider
Microsoft.Extensions.Logging.EventLog.EventLogLoggerProvider
添加,清除
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging((ctx, logger) =>
{
//logger.AddProvider();// 添加
logger.ClearProviders();// 清除
})
日志的最佳實踐
先注釋清除代碼
//.ConfigureLogging((ctx, logger) =>
//{
// //logger.AddProvider();// 添加
// logger.ClearProviders();// 清除
//})
在 appsettings.json 調(diào)整日志級別為 Trace
{
"Logging": {
"LogLevel": {
"Default": "Trace",
"Microsoft": "Trace",
"Microsoft.Hosting.Lifetime": "Trace"
}
}
}
在 WeatherForecastController 中添加一個方法,根據(jù)需求使用日志
public IActionResult CreateOrder(dynamic order)
{
_logger.LogTrace("Enter CreateOrder method");
_logger.LogDebug("Start creating order: {0}", "order info");
_logger.LogTrace("Start executing _orderService.Create method");
if (order.amount <= 0)
{
_logger.LogWarning("Order Amount is:{0}");
}
_orderService.Create(order);
_logger.LogTrace("Completed executing _orderService.Crete method");
_logger.LogTrace("Leave CreateOrder Successfully");
_logger.LogInformation("Leave CreateOrder Successfully");
return Ok();
}
GitHub源碼鏈接:
https://github.com/MINGSON666/Personal-Learning-Library/tree/main/ArchitectTrainingCamp/HelloApi
課程鏈接
.NET云原生架構(gòu)師訓(xùn)練營講什么,怎么講,講多久
評論
圖片
表情
