日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

.NET Core开发实战(第18课:日志框架:聊聊记日志的最佳姿势)--学习笔记(上)...

發布時間:2023/12/4 asp.net 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .NET Core开发实战(第18课:日志框架:聊聊记日志的最佳姿势)--学习笔记(上)... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

18 | 日志框架:聊聊記日志的最佳姿勢

源碼鏈接:
https://github.com/witskeeper/geektime/tree/master/samples/LoggingSimpleDemo

日志框架必要的包:

1、Microsoft.Extensions.Logging

2、Microsoft.Extensions.Logging.Console

3、Microsoft.Extensions.Logging.Debug

4、Microsoft.Extensions.Logging.TraceSource

代碼通過一個控制臺程序,展示從讀取配置到整個日志的記錄器的構造和日志記錄的過程

首先從文件讀取配置

IConfigurationBuilder configBuilder = new ConfigurationBuilder(); configBuilder.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true); var config = configBuilder.Build();

接著構造容器,注入對象

IServiceCollection serviceCollection = new ServiceCollection();// 構造容器 // 用工廠模式將配置對象注冊到容器管理 // 注入的時候使用了一個委托,意味著容器可以幫我們管理這個對象的生命周期 serviceCollection.AddSingleton<IConfiguration>(p => config); // 如果將實例直接注入,容器不會幫我們管理 //serviceCollection.AddSingleton<IConfiguration>(config);// AddLogging 往容器里面注冊了幾個關鍵對象: // ILoggerFactory,泛型模板 typeof (ILogger<>),Logger 的過濾配置 IConfigureOptions<LoggerFilterOptions> // 最后一行,configure((ILoggingBuilder) new LoggingBuilder(services)); 就是整個注入我們的委托 serviceCollection.AddLogging(builder => {builder.AddConfiguration(config.GetSection("Logging"));// 注冊 Logging 配置的 Sectionbuilder.AddConsole();// 先使用一個 Console 的日志輸出提供程序 });

AddLogging 源碼

public static IServiceCollection AddLogging(this IServiceCollection services,Action<ILoggingBuilder> configure) {if (services == null)throw new ArgumentNullException(nameof (services));services.AddOptions();services.TryAdd(ServiceDescriptor.Singleton<ILoggerFactory, LoggerFactory>());services.TryAdd(ServiceDescriptor.Singleton(typeof (ILogger<>), typeof (Logger<>)));services.TryAddEnumerable(ServiceDescriptor.Singleton<IConfigureOptions<LoggerFilterOptions>>((IConfigureOptions<LoggerFilterOptions>) new DefaultLoggerLevelConfigureOptions(LogLevel.Information)));configure((ILoggingBuilder) new LoggingBuilder(services));return services; }

配置文件,appsettings.json

{"Logging": {"LogLevel": {"Default": "Debug","Microsoft": "Warning","Microsoft.Hosting.Lifetime": "Information"},"Console": {"LogLevel": {"Default": "Information","Program": "Trace","alogger": "Trace","LoggingSimpleDemo.OrderService": "None"}}} }

Logging 里面定義了 Log 的級別,Key 代表 Log 的名稱,Value 代表 Logger 的級別

Console 是指針對 Console 的輸出提供程序配置的日志級別

下面看一下日志級別的定義,按照嚴重程度從低到高

namespace Microsoft.Extensions.Logging {public enum LogLevel{Trace,Debug,Information,Warning,Error,Critical,None,} }

也就是說我們可以指定日志輸出的最低級別

接著 BuildServiceProvider,從容器里面獲取 ILoggerFactory

IServiceProvider service = serviceCollection.BuildServiceProvider();ILoggerFactory loggerFactory = service.GetService<ILoggerFactory>();

ILoggerFactory 的定義

namespace Microsoft.Extensions.Logging {public interface ILoggerFactory : IDisposable{// 輸入的名稱是 Logger 的名稱,輸出的結果是一個 ILogger 的對象,代表日志記錄器ILogger CreateLogger(string categoryName);// 這個方法通常不會用到它,因為通常情況下注冊容器提供程序會在 AddLogging 委托里面去注冊,而不會用 AddProvider 方法void AddProvider(ILoggerProvider provider);} }

獲取到 ILoggerFactory 之后就可以創建日志記錄器

ILogger alogger = loggerFactory.CreateLogger("alogger");alogger.LogDebug(2001, "aiya"); alogger.LogInformation("hello");var ex = new Exception("出錯了"); alogger.LogError(ex, "出錯了");

因為配置文件中 alogger 的級別是 Trace

"alogger": "Trace",

所以這三行都會被打印出來

啟動程序,輸出如下:

dbug: alogger[2001]aiya info: alogger[0]hello fail: alogger[0]出錯了 System.Exception: 出錯了

方括號的內容是 EventID,也就是針對每一個記錄的位置事件,可以為它分配一個事件 ID,代碼中在 LogDebug 的時候定義了一個事件 ID 是2001

假如說把 alogger 的日志級別調整成 Information

"alogger": "Information",

那么 Debug 級別的信息沒有輸出的

info: alogger[0]hello fail: alogger[0]出錯了 System.Exception: 出錯了

總結

以上是生活随笔為你收集整理的.NET Core开发实战(第18课:日志框架:聊聊记日志的最佳姿势)--学习笔记(上)...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。