【摘要】 跟我一起学.NetCore之日志作用域及第三方日志框架扩展考必过小编为大家整理了关于跟我一起学.NetCore之日志作用域及第三方日志框架扩展的信息,希望可以帮助到大家!
跟我一起学.NetCore之日志作用域及第三方日志框架扩展
标签:guietc中间件前言netcore自己剖析业务rap
前言
上一节对日志的部分核心类型进行简单的剖析,相信现在再使用日志的时候,应该大概知道怎么一回事了,比如记录器是怎么来的,是如何将日志内容写入到不同目的地的等;当然还有很多细节没深入讲解,抽时间小伙伴们可以去研究研究;废话不多说,接下来主要举例演示日志作用域及第三方日志框架的扩展;
正文
说到日志作用域,相信很多小伙伴听着不是那么熟悉吧,之前进行日志记录时候,是不是把内容记录下来就完事了,最多就是再稍微格式化一下;如果是这样,那在排查问题的时候肯定差不多是这样:一点一点的扒日志,然后根据关键词找大概地方,再根据时间和内容定位排错,更让人头大的是哪些日志是在同一个业务中产生的,哪些日志是在同一个请求中记录的等等一系列烦恼;对于复杂的流程日志关联时扒日志就更需要靠眼力了;
而日志作用域可以辅助排查和定位,所谓日志作用域,我是这么理解的,就是将日志记录画一个范围,对应的业务逻辑记录在指定的范围内,这样在排查业务逻辑的时候就减少对业务日志的归属分辨,从而快速定位对应请求或业务的相关日志内容;别那么多废话,上例子......
来吧,一个WebAPI项目走起...
运行,然后嗖嗖嗖嗖按F5刷新几次,如下:
懵了吧,很难辨别出哪些日志内容是同一个请求记录的吧,那排错分析就更加模糊了,就算日志加一些特殊的关键字区分,那排查效率也不高,对吧;其实对于请求而言,框架内部已经实现了,只需要配置开启即可:
其他不动,运行项目,然后嗖嗖嗖嗖按F5刷新几次,如下:
咋多了那么东西,每一次记录,都把对应的请求ID等信息带上了,可以清楚的看到日志是哪个请求的,其他信息而对于日志分析框架来说是很有用的;以上只是举例控制台输出案例,其他目的地也可以进行配置;
到这里肯定会有小伙伴问,那我一次请求里面有多个业务,咋区分呢?那先来稍微改一下代码,增加了一个Action方法:
运行,再刷新
通过BeginScope可以开启一个新的记录作用域,根据对应业务进行记录即可;这里的源码实现就不具体说了,上一节简单提了一下,如果需要详细研究,可以私下继续看看源码;
由于框架本身内置的日志记录,有时候满足不了项目需求,比如需要将日志内容写入到其他目的地,日志内容格式需自定义等,当然这些通过自己也可以实现,只要实现核心类型即可;但是成熟的第三方框架已经很多了,如NLog,Log4Net,Serilog等,别人已经把轮子造好了,咱们直接拿来用岂不美哉;
由于之前在博客里写过一篇集成Log4Net的文章(去博客园吧https://www.cnblogs.com/zoe-zyq/p/12900636.html),这里就举例演示一下集成Serilog吧,三步走:
安装依赖包;
配置文件;
其实可以单独做一个文件配置,但这里和appsettings写在一块了;
代码编写;
其他逻辑不用变,原来记录日志的方式已经委托给Serilog框架进行日志记录了;
以上只是对Serilog简单的配置和使用,如需详细了解,请进入官网https://github.com/serilog/serilog/wiki/Configuration-Basics,文档很全,说的也很详细;
总结
对于日志的使用就简单说到这吧,这节说的内容不多,也比较简单,但有以下几个建议:
日志最好结构化存储,便于检索和分析;
日志针对负责复杂即又关键的业务,最好加上作用域标识;
日志记录时避免记录敏感信息;
日志记录时推荐以模板的形式进行记录;
// 模板形式,推荐
_logger.LogInformation("TestLogger {content}", DateTime.Now);
// 不推荐
_logger.LogInformation($"TestLogger {DateTime.Now}", DateTime.Now)
下一节说说中间件~~~
------------------------------------------------
一个被程序搞丑的帅小伙,关注"Code综艺圈",识别关注跟我一起学~~~
跟我一起学.NetCore之日志作用域及第三方日志框架扩展
标签:guietc中间件前言netcore自己剖析业务rap
以上就是跟我一起学.NetCore之日志作用域及第三方日志框架扩展的内容,更多资讯请及时关注考必过网站,最新消息小编会第一时间发布,大家考试加油!