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

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

内容简介:除了使用 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课:日志框架:聊聊记日志的最佳姿势)--学习笔记(下)


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

查看所有标签

猜你喜欢:

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

王道程序员求职宝典

王道程序员求职宝典

电子工业出版社 / 2013-11 / 56.00元

本书精选了大量知名企业的程序员笔试、面试题,重点突出、解答翔实。全书共分为四部分,各部分如下:第一部分是程序设计基础及数据结构基础,讨论C/C++基础知识以及数据结构基础知识;第二部分是计算机网络基础,讨论网络模型、套接字编程基本操作、IPv4与IPv6、子网划分、网络常用测试工具等;第三部分是操作系统基础,讨论进程与线程的基本知识、进程间通信与进程同步、内存管理的相关知识等;第四部分是其他计算机......一起来看看 《王道程序员求职宝典》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具