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

栏目: IT技术 · 发布时间: 5年前

内容简介:除了使用 CreateLogger 指定 logger 的名称,实际上还可以借助容器来构造 logger,通常情况下我们会定义自己的类接着,将 OrderService 注入到容器中日志级别设置为 Trace

18 | 日志框架:聊聊记日志的最佳姿势

除了使用 CreateLogger 指定 logger 的名称,实际上还可以借助容器来构造 logger,通常情况下我们会定义自己的类

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();

日志级别设置为 Trace

"LoggingSimpleDemo.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、日志记录的方法

LogInformation,LogDebug,还有一些小技巧,使用模板的方式记录日志,而不是提前拼接字符串输入给日志系统

5、避免记录敏感信息,如密码、密钥,规避安全风险

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


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

细节决定交互设计的成败

细节决定交互设计的成败

张亮 / 2009-3 / 49.00元

《细节决定交互设计的成败》是一本非常实用的有关软件界面的交互设计和可用性设计方面知识的书籍,通过采用一问一答的形式,你将会有针对性地学习到一些能够很快应用在自己软件开发工作中的细节知识和诀窍。例如,如何减轻用户的等待感,如何预防和减少用户的使用错误等。另外,你会发现阅读《细节决定交互设计的成败》时会非常轻松和愉悦;这是由于《细节决定交互设计的成败》写作上的两个特点:第一,采用较多日常生活中的例子来......一起来看看 《细节决定交互设计的成败》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具