做网站怎样更改背景,网上接效果图平台,南方人才网,福田网站设计公司哪家好18 | 日志框架#xff1a;聊聊记日志的最佳姿势除了使用 CreateLogger 指定 logger 的名称#xff0c;实际上还可以借助容器来构造 logger#xff0c;通常情况下我们会定义自己的类namespace LoggingSimpleDemo
{public class OrderService{ILoggerOrderService _lo… 18 | 日志框架聊聊记日志的最佳姿势除了使用 CreateLogger 指定 logger 的名称实际上还可以借助容器来构造 logger通常情况下我们会定义自己的类namespace LoggingSimpleDemo
{public class OrderService{ILoggerOrderService _logger;public OrderService(ILoggerOrderService logger){_logger logger;}public void Show(){_logger.LogInformation(Show Time{time}, DateTime.Now);}}
}接着将 OrderService 注入到容器中serviceCollection.AddTransientOrderService();
IServiceProvider service serviceCollection.BuildServiceProvider();
var order service.GetServiceOrderService();
order.Show();日志级别设置为 TraceLoggingSimpleDemo.OrderService: Trace启动程序输出如下info: LoggingSimpleDemo.OrderService[0]Show Time03/06/2020 23:41:38这样做的意义是什么呢通常情况下并不会用 ILoggerFactory 来构造日志记录器而是用强类型的这种依赖注入的方式来去管理我们的日志也就是说用构造函数将泛型的 ILogger 注入进来的方式这样的方式有个好处就是我们不需要去为 logger 定义名字它会默认将我们类型的名称作为记录器的名字命名空间加上类名 LoggingSimpleDemo.OrderService 那也就是可以在配置文件里面设置日志级别LoggingSimpleDemo.OrderService: None这样子就没有输出这里面有一个小技巧需要大家特别注意就是当我们在记录日志的时候尽量使用模板的方式_logger.LogInformation(Show Time{time}, DateTime.Now);以下两种方式效果相同但是字符串拼接的时机不同_logger.LogInformation(Show Time{time}, DateTime.Now);_logger.LogInformation($Show Time{DateTime.Now});第一行代码是在我们决定要输出的时候也就是在 LogInformation 内部 console 要输出的时候才做拼接的动作第二行代码是指我们在字符串拼接好以后输入给了 LogInformation如果我们把日志级别关掉LoggingSimpleDemo.OrderService: None两行代码都不会有输出但是第一行代码字符串拼接的动作不会执行第二行代码已经执行了第一行代码节省了运行资源另外一个就是在记录日志的时候不要把敏感信息记录到日志中记录日志的目的是为了调试或者定位问题总结一下1、日志级别定义日志级别会从严重程度的低到高定义可以决定输出的最低级别2、日志对象获取可以通过 ILoggerFactory 的方式获取日志对象对它指定一个名字也可以通过 ILogger 泛型的模式从容器中获取日志对象最推荐的就是强类型的泛型模式3、日志过滤的配置逻辑可以针对 logger 的名称来进行任意的配置日志的开关以及日志的级别4、日志记录的方法LogInformationLogDebug还有一些小技巧使用模板的方式记录日志而不是提前拼接字符串输入给日志系统5、避免记录敏感信息如密码、密钥规避安全风险