.NET Core开发实战(第18课:日志框架:聊聊记日志的最佳姿势)--学习笔记(下)...
18 | 日志框架:聊聊記日志的最佳姿勢(shì)
除了使用 CreateLogger 指定 logger 的名稱,實(shí)際上還可以借助容器來(lái)構(gòu)造 logger,通常情況下我們會(huì)定義自己的類
namespace LoggingSimpleDemo {public class OrderService{ILogger<OrderService> _logger;public OrderService(ILogger<OrderService> logger){_logger = logger;}public void Show(){_logger.LogInformation("Show Time{time}", DateTime.Now);}} }接著,將 OrderService 注入到容器中
serviceCollection.AddTransient<OrderService>(); IServiceProvider service = serviceCollection.BuildServiceProvider(); var order = service.GetService<OrderService>(); order.Show();日志級(jí)別設(shè)置為 Trace
"LoggingSimpleDemo.OrderService": "Trace"啟動(dòng)程序,輸出如下:
info: LoggingSimpleDemo.OrderService[0]Show Time03/06/2020 23:41:38這樣做的意義是什么呢?
通常情況下并不會(huì)用 ILoggerFactory 來(lái)構(gòu)造日志記錄器,而是用強(qiáng)類型的這種依賴注入的方式來(lái)去管理我們的日志,也就是說(shuō)用構(gòu)造函數(shù)將泛型的 ILogger 注入進(jìn)來(lái)的方式
這樣的方式有個(gè)好處就是我們不需要去為 logger 定義名字,它會(huì)默認(rèn)將我們類型的名稱作為記錄器的名字,命名空間加上類名 LoggingSimpleDemo.OrderService ,那也就是可以在配置文件里面設(shè)置日志級(jí)別
"LoggingSimpleDemo.OrderService": "None"這樣子就沒(méi)有輸出
這里面有一個(gè)小技巧,需要大家特別注意,就是當(dāng)我們?cè)谟涗浫罩镜臅r(shí)候,盡量使用模板的方式
_logger.LogInformation("Show Time{time}", DateTime.Now);以下兩種方式效果相同,但是字符串拼接的時(shí)機(jī)不同
_logger.LogInformation("Show Time{time}", DateTime.Now);_logger.LogInformation($"Show Time{DateTime.Now}");第一行代碼是在我們決定要輸出的時(shí)候,也就是在 LogInformation 內(nèi)部 console 要輸出的時(shí)候才做拼接的動(dòng)作
第二行代碼是指我們?cè)谧址唇雍靡院?#xff0c;輸入給了 LogInformation
如果我們把日志級(jí)別關(guān)掉
"LoggingSimpleDemo.OrderService": "None"兩行代碼都不會(huì)有輸出,但是第一行代碼字符串拼接的動(dòng)作不會(huì)執(zhí)行,第二行代碼已經(jīng)執(zhí)行了,第一行代碼節(jié)省了運(yùn)行資源
另外一個(gè)就是,在記錄日志的時(shí)候,不要把敏感信息記錄到日志中,記錄日志的目的是為了調(diào)試或者定位問(wèn)題
總結(jié)一下
1、日志級(jí)別定義
日志級(jí)別會(huì)從嚴(yán)重程度的低到高定義,可以決定輸出的最低級(jí)別
2、日志對(duì)象獲取
可以通過(guò) ILoggerFactory 的方式獲取日志對(duì)象,對(duì)它指定一個(gè)名字,也可以通過(guò) ILogger 泛型的模式,從容器中獲取日志對(duì)象,最推薦的就是強(qiáng)類型的泛型模式
3、日志過(guò)濾的配置邏輯
可以針對(duì) logger 的名稱來(lái)進(jìn)行任意的配置,日志的開(kāi)關(guān)以及日志的級(jí)別
4、日志記錄的方法
LogInformation,LogDebug,還有一些小技巧,使用模板的方式記錄日志,而不是提前拼接字符串輸入給日志系統(tǒng)
5、避免記錄敏感信息,如密碼、密鑰,規(guī)避安全風(fēng)險(xiǎn)
總結(jié)
以上是生活随笔為你收集整理的.NET Core开发实战(第18课:日志框架:聊聊记日志的最佳姿势)--学习笔记(下)...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C# 客户端内存优化分析
- 下一篇: 《ASP.NET Core 微服务实战》