zoukankan      html  css  js  c++  java
  • 跟我一起学.NetCore之日志作用域及第三方日志框架扩展

    前言

    上一节对日志的部分核心类型进行简单的剖析,相信现在再使用日志的时候,应该大概知道怎么一回事了,比如记录器是怎么来的,是如何将日志内容写入到不同目的地的等;当然还有很多细节没深入讲解,抽时间小伙伴们可以去研究研究;废话不多说,接下来主要举例演示日志作用域及第三方日志框架的扩展;

    正文

    说到日志作用域,相信很多小伙伴听着不是那么熟悉吧,之前进行日志记录时候,是不是把内容记录下来就完事了,最多就是再稍微格式化一下;如果是这样,那在排查问题的时候肯定差不多是这样:一点一点的扒日志,然后根据关键词找大概地方,再根据时间和内容定位排错,更让人头大的是哪些日志是在同一个业务中产生的,哪些日志是在同一个请求中记录的等等一系列烦恼;对于复杂的流程日志关联时扒日志就更需要靠眼力了;

    而日志作用域可以辅助排查和定位,所谓日志作用域,我是这么理解的,就是将日志记录画一个范围,对应的业务逻辑记录在指定的范围内,这样在排查业务逻辑的时候就减少对业务日志的归属分辨,从而快速定位对应请求或业务的相关日志内容;别那么多废话,上例子......

    来吧,一个WebAPI项目走起...

    img

    运行,然后嗖嗖嗖嗖按F5刷新几次,如下:

    img

    懵了吧,很难辨别出哪些日志内容是同一个请求记录的吧,那排错分析就更加模糊了,就算日志加一些特殊的关键字区分,那排查效率也不高,对吧;其实对于请求而言,框架内部已经实现了,只需要配置开启即可:

    img

    其他不动,运行项目,然后嗖嗖嗖嗖按F5刷新几次,如下:

    img

    咋多了那么东西,每一次记录,都把对应的请求ID等信息带上了,可以清楚的看到日志是哪个请求的,其他信息而对于日志分析框架来说是很有用的;以上只是举例控制台输出案例,其他目的地也可以进行配置;

    到这里肯定会有小伙伴问,那我一次请求里面有多个业务,咋区分呢?那先来稍微改一下代码,增加了一个Action方法:

    img

    运行,再刷新

    img

    通过BeginScope可以开启一个新的记录作用域,根据对应业务进行记录即可;这里的源码实现就不具体说了,上一节简单提了一下,如果需要详细研究,可以私下继续看看源码;

    由于框架本身内置的日志记录,有时候满足不了项目需求,比如需要将日志内容写入到其他目的地,日志内容格式需自定义等,当然这些通过自己也可以实现,只要实现核心类型即可;但是成熟的第三方框架已经很多了,如NLog,Log4Net,Serilog等,别人已经把轮子造好了,咱们直接拿来用岂不美哉;

    由于之前在博客里写过一篇集成Log4Net的文章(去博客园吧https://www.cnblogs.com/zoe-zyq/p/12900636.html),这里就举例演示一下集成Serilog吧,三步走:

    • 安装依赖包;

      img

    • 配置文件;

      其实可以单独做一个文件配置,但这里和appsettings写在一块了;

      img

    • 代码编写;

      img

      其他逻辑不用变,原来记录日志的方式已经委托给Serilog框架进行日志记录了;

      img

    以上只是对Serilog简单的配置和使用,如需详细了解,请进入官网https://github.com/serilog/serilog/wiki/Configuration-Basics,文档很全,说的也很详细;

    总结

    对于日志的使用就简单说到这吧,这节说的内容不多,也比较简单,但有以下几个建议:

    • 日志最好结构化存储,便于检索和分析;

    • 日志针对负责复杂即又关键的业务,最好加上作用域标识;

    • 日志记录时避免记录敏感信息;

    • 日志记录时推荐以模板的形式进行记录;

      // 模板形式,推荐
      _logger.LogInformation("TestLogger {content}", DateTime.Now);
      // 不推荐
      _logger.LogInformation($"TestLogger {DateTime.Now}", DateTime.Now)
      

    下一节说说中间件~~~

    ------------------------------------------------

    一个被程序搞丑的帅小伙,关注"Code综艺圈",识别关注跟我一起学~~~

    img

  • 相关阅读:
    linux sysfs (2)
    微软——助您启动云的力量网络虚拟盛会
    Windows Azure入门教学系列 全面更新啦!
    与Advanced Telemetry创始人兼 CTO, Tom Naylor的访谈
    Windows Azure AppFabric概述
    Windows Azure Extra Small Instances Public Beta版本发布
    DataMarket 一月内容更新
    和Steve, Wade 一起学习如何使用Windows Azure Startup Tasks
    现实世界的Windows Azure:与eCraft的 Nicklas Andersson(CTO),Peter Löfgren(项目经理)以及Jörgen Westerling(CCO)的访谈
    正确使用Windows Azure 中的VM Role
  • 原文地址:https://www.cnblogs.com/zoe-zyq/p/13587817.html
Copyright © 2011-2022 走看看