# 認識.NET 日誌系統 ## 基本概念 1. 日誌級別:Trace{ logBuilder.AddConsole() //可多個Provider }) ``` 3. 需要記錄日誌的代碼,註入ILogger即可,T一般就用當前類,這個類的名字會輸出到日誌,方便定位錯誤,然後調用LogInforma ...
認識.NET 日誌系統
基本概念
- 日誌級別:Trace<Debug<Information<Waring<Error<Critical
- 日誌提供者(LoggingProvider):把日誌輸出控制台、文件、資料庫等。
- .NET的日誌非常靈活,對於業務代碼只要註入日誌對象記錄日誌即可,具體哪些日誌輸出到哪裡、什麼樣的格式、是否輸出等都有配置或者初始化代碼決定。
列子:輸出到控制台
-
NuGet:Microsoft.Extensions.Logging、Microsoft.Extensions.Logging.Console。
-
DI註入:
services.AddLogging(logbuilder=>{ logBuilder.AddConsole() //可多個Provider })
-
需要記錄日誌的代碼,註入ILogger
即可,T一般就用當前類,這個類的名字會輸出到日誌,方便定位錯誤,然後調用LogInformation()、LogError等方法輸入不同級別的日誌,還支持輸出異常對象。
代碼
Program類
using LogginDemo1;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
//用於註冊依賴註入
ServiceCollection services = new ServiceCollection();
services.AddLogging(logBuilder =>
{
logBuilder.AddConsole();
});
services.AddScoped<Test1>();
using var sp = services.BuildServiceProvider();
var test1 = sp.GetRequiredService<Test1>();
test1.Test();
Test類
ILogger
using Microsoft.Extensions.Logging;
namespace LogginDemo1;
public class Test1
{
private readonly ILogger<Test1> _logger;
public Test1(ILogger<Test1> logger)
{
_logger = logger;
}
public void Test()
{
_logger.LogDebug("開始執行資料庫同步");
_logger.LogDebug("連接資料庫成功");
_logger.LogWarning("查找數據失敗,重試第一次");
_logger.LogWarning("查找數據失敗,重試第二次");
_logger.LogError("查找數據最終失敗");
}
}
列印效果
LogDebug級別太低,預設不輸出,如果需要顯示Debug信息,則需要進一步配置。
services.AddLogging(logBuilder =>
{
logBuilder.AddConsole();
logBuilder.SetMinimumLevel(LogLevel.Trace); //設置最低級別
});
異常處理
可以直接傳入ex對象,錯誤信息將會列印出來。
try
{
File.ReadAllText("A:/1.txt");
_logger.LogDebug("讀取文件成功");
}
catch (Exception ex)
{
_logger.LogError(ex,"讀取文件失敗");
}
參考鏈接
- 【.NET 6教程,.Net Core 2022視頻教程,楊中科主講】 https://www.bilibili.com/video/BV1pK41137He/?p=46&share_source=copy_web&vd_source=fce337a51d11a67781404c67ec0b5084
每日一道面試題
簡述 private、 protected、 public、 internal 修飾符的訪問許可權。
答 .
- private : 私有成員, 在類的內部才可以訪問。
- protected : 保護成員,該類內部和繼承類中可以訪問。
- public : 公共成員,完全公開,沒有訪問限制。
- internal: 在同一命名空間內可以訪問。