在一次.Net Core小项目的开发中,掌握的不够深入,对日志记录并没有好好利用,以至于一出现异常问题,都得跑动服务器上查看,那时一度怀疑自己肯定没学好,不然这一块日志不可能需要自己扒服务器日志来查看,果然,很多东西没掌握,至此,花点时间看了下日志的相关操作。利用日志服务来查看日志数据。

本文地址:https://www.cnblogs.com/CKExp/p/9246788.html

本文Demo的地址:https://gitee.com/530521314/LogPanel.git

一、日志记录的原则

  日志是为了方便我们观察应用程序是否正常运行,也是当运行不正常是,能够快速找到出现问题,定位问题的方式。

  有几条日志记录原则是我们大多都得遵循的:

  1、日志记录清晰,内容得让我们能够知道应用程序运行正常或运行不正常下能够有关键信息指明哪里出问题了。

  2、不要过度记录,一些场景下我们需要预判是否需要记录日志信息,我们能够控制日志记录的数量,同样,日志内容,要精简记录,无关紧要的文字,废话等无需加入。

  3、控制日志记录级别,或许在一个日志级别下记录了很多信息,可是其中的部分信息才是最为重要的,当调高一个记录级别,这部分最为重要的信息就展示出来了,那就直接调高级别吧。

  4、隐私保护,日志虽然是让开发运维人员看到,可是我们也不能所有信息都记录下来,用户的隐私信息我们得保护好。

二、内置日志组件

  Asp.Net Core中内置了日志组件,功能也很强大,首先来个简单示例:

  直接使用内置日志功能,无需在startup中加入另外的代码。

在调试框下看到输出的日志信息。

  

  开始控制日志记录级别:

  在StartUp下,对内置日志组件做一些处理,在配置文件中将日志记录的级别提高到Information级别:

 appsetting.json文件中,将LogLevel的默认级别设为Information,这样一来在之前的示例中_logger.LogDebug将失去作用。

对于异常来讲,出现异常,日志肯定得记录下来,不然出现异常,直接抛出,那还要日志有什么用呢。

异常信息加载出来。

  

  出现异常,拦截异常,记录日志信息,不单单在这里,在Filter或是几个中间件中,都能够记录下来,此处不在多讨论。

三、第三方日志组件

  尽管微软已经内置了日志记录组件,但是一些第三方组件或许是我们中意的,在性能上、记录方式上、操作上等等,如Log4Net、Logger、NLog和Serilog 等。结构化的日志使得我们阅读日志也更加轻松点。

  在此,我利用Serilog组件来替换内置的日志组件,添加相应的依赖包(Serilog.Extensions.Logging和Serilog.Sinks.Literate)。

  然后来更新Startup类,令Serilog组件开始发挥它的作用。

  尽管可以在Program中加入Serilog组件,在这里,我将只在StartUp类中更改代码,为了代码统一存放,对于组件加入有三种方式:

  方式一在StartUp初始化完毕加入进来,利用Log.Logger的全局性,在整个应用程序中发挥作用,而不需要在各处声明注入。

  其中的 .WriteTo.Seq("http://localhost:5341")是为了后面加入Seq组件而提前写入的,可以忽略。

  在应用程序中的使用方式是直接使用Log.Logger写入即可,如在HomeController的Contact方法中,利用且只能利用这种方式写入,当想用最开始那种方式注入时,在LoggerFactory中并没有SerilogProvider,因为我们并没有把Serilog加入到LoggerFactory中,这也使得Serilog和内置日志出现共存的局面,并可以通过两种方式使用日志功能。

 利用这种方式下的日志输出。    

   方式二:在ConfigureServices中将Serilog加入到LoggerFactory中,通过统一的扩展方式加入进来,利用Action委托指定Serilog组件,其中允许我们对Serilog进行相关设置。

这种方式下,我们需要将Logger通过依赖注入的形式加入进来,先来看下是否加入到了LoggerFactory中

  

  加入进来了,并完成了日志的输出。

  

  方式三:和方式二一样都是加入到LoggerFactory中,但是直接利用的是Serilog提供的扩展方法AddSerilog加入进来。

 Serilog组件同源加入进来了,输出结果就不展示了和方式二一样的。

  

  具体Serilog的非常优秀的功能就不介绍了,请看Serilog的官方介绍 https://github.com/serilog

四、Seq组件

  到了本文的主题——Seq组件,通过网页UI的形式将日志展现出来,内容更加多样化,并赋予了更多功能日志搜索。

  首先,安装Seq组件,Seq下载地址:https://getseq.net/Download

  本地开发情形下是免费使用的,如果需要在生产环境中使用,需要商业许可(你懂的,money).在目前的版本中,4.2是只能够在windows下跑,也就是说我们如果是在windows下开发,在测试时可以借助这个方便的查看日志信息,按照给定的安装步骤完成安装。

  在应用程序中,我们通过Nuget管理Serilog.Sinks.Seq包,该组件隶属于Serilog旗下。Seq默认的端口是利用5341端口,如果我们想要使用其它端口,我们可以更改在应用程序中的地址

  以上一节的方式三为例,在其中加入一行.WriteTo.Seq(“http://localhost:5341”)便可指定Seq服务器地址。

在本地windows运行起来看下,启动Seq服务器,当然,你这里或许需要配置一些账号密码之类的,都是小问题。

  

  启动应用程序,并进入那些写了日志的方法中,日志信息已经进来了,我们可以查看这些日志信息,并通过日志搜索功能搜索。

  

  

  在这里要说明一下,同时也在Seq组件的网站中也写明了。使用这些方式都可以直接使用Seq组件,第三方组件也不是必须的,直接利用Asp.Net Core的内置日志组件一样可以使用Seq组件。

     

  可是,Linux下可以吗? 假如我的开发环境在Linux下岂不是不行。现在有一个预览版5.0的,在Docker Hub中有Seq的镜像,虽然是预览版,可是我还是想试试。

  Docker Hub中Seq镜像地址:https://docs.getseq.net/v5.0/docs/docker

  现在,开始Linux中弄起来。

  首先完成镜像的爬取,之后会自动启动该镜像内部的服务。我们直接输入地址访问即可。默认地址ip:5341端口

docker run -e ACCEPT_EULA=Y -p 5341:80 datalust/seq:latest

  页面有了,Linux下看来也是可以的了,把应用程序通过Jenkins上都发布成功了,可是访问出现问题,Docker外部端口无法映射到内部端口,糟心,可是应该不是大问题,就此也就不弄日志信息的展示了。

  

  至此,日志相关的一系列知识简单带过,关键是Seq那个可视化日志界面,很nice。

  本文地址:https://www.cnblogs.com/CKExp/p/9246788.html

  本文Demo的地址:https://gitee.com/530521314/LogPanel.git

推荐大家使用更好的Exceptionless:

  • .NET Core微服务之基于Exceptionless实现分布式日志记录

原文地址:https://www.cnblogs.com/CKExp/p/9246788.html

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

Asp.Net Core中利用Seq组件展示结构化日志功能相关推荐

  1. .NET Core中的验证组件FluentValidation的实战分享

    今天有人问我能不能出一篇FluentValidation的教程,刚好今天在实现我们的.NET Core实战项目之CMS的修改密码部分的功能中有用到FluentValidation,所以就以修改用户密码 ...

  2. 如何在 ASP.NET Core 中 使用 功能开关

    .NET Core 中的 功能管理 (Feature Management) 包可用于实现 功能开关,什么意思呢?就是可以通过 功能开关 特性动态的改变应用程序的行为而不需要改变任何的业务逻辑代码,听 ...

  3. 如何利用NLog输出结构化日志,并在Kibana优雅分析日志?

    上文我们演示了使用NLog向ElasticSearch写日志的基本过程(输出的是普通文本日志),今天我们来看下如何向ES输出结构化日志.在Kibana中分析日志. 什么是结构化日志? 当前互联网.物联 ...

  4. 如何在 ASP.Net Core 中使用 Serilog

    记录日志的一个作用就是方便对应用程序进行跟踪和排错调查,在实际应用上都是引入 日志框架,但如果你的 日志文件 包含非结构化的数据,那么查询起来将是一个噩梦,所以需要在记录日志的时候采用结构化方式. 将 ...

  5. 如何在 ASP.NET Core 中 自定义中间件

    ASP.NET Core 是一个跨平台,开源的,轻量级,高性能 并且高度模块化的web框架,同时扩展性也是非常强,你可以在 request -> response 请求管道中安插各种中间件来根据 ...

  6. 如何简单的在 ASP.NET Core 中集成 JWT 认证?

    前情提要:ASP.NET Core 使用 JWT 搭建分布式无状态身份验证系统 文章超长预警(1万字以上),不想看全部实现过程的同学可以直接跳转到末尾查看成果或者一键安装相关的 nuget 包 自上一 ...

  7. ASP.NET Core 中文文档 第三章 原理(13)管理应用程序状态

    原文:Managing Application State 作者:Steve Smith 翻译:姚阿勇(Dr.Yao) 校对:高嵩 在 ASP.NET Core 中,有多种途径可以对应用程序的状态进行 ...

  8. 在 ASP.NET Core 中使用 Serilog 使用 Fluentd 将日志写入 Elasticsearch

    在 ASP.NET Core 中使用 Serilog 使用 Fluentd 将日志写入 Elasticsearch 原文来自:https://andrewlock.net/writing-logs-t ...

  9. 如何在 ASP.Net Core 中对接 WCF

    在 REST API 出现之前,SOAP (Simple Object Access Protocol) 一直都是基于 web 的标准协议,虽然现在 REST 大行其道,但在平时开发中总会遇到对接第三 ...

最新文章

  1. labview生成exe
  2. c++程序设计梳理(谭浩强)3-4章
  3. [Solution] The superclass “javax.servlet.http.HttpServlet” was not found on the Java Build Path
  4. 点击左侧导航栏切换右侧商品(左右联动)
  5. 工业用微型计算机笔记(13)-指令系统(8)
  6. centos 删除crontab_centos下crontab的使用
  7. ssm架构 开源项目_6个开源架构项目签出
  8. Oracle listener
  9. (二)OpenCV Mat常用属性和方法
  10. 分布式场景下redis已经逐渐取代了memcached,那么各有什么使用场景和优缺点呢?
  11. navicat安装+链接mysql 8.x
  12. 硬盘助手写入文件的正确提取
  13. 安卓手机如何防盗_如何使用IMEI号码追踪丢失的安卓(Android)手机
  14. 在精益(Lean)中对定理进行证明(第一章)
  15. 夜神模拟器调试Android应用程序
  16. 世界上最震撼的屏幕保护程序
  17. 显卡的指标有哪些方面_纯干货!显卡购买重要参数:老司机勿入
  18. 搜索系统—搜索引擎的原理,架构与细节
  19. CentOS7 服务器分析挖矿病毒,清理挖矿病毒 tor2web
  20. android 平台马甲举报,GitHub - qq549631030/AndroidJunkCode: Android马甲包生成垃圾代码插件...

热门文章

  1. TortoiseSVN客户端重新设置用户名和密码[转]
  2. LeetCode --- Valid Parentheses
  3. 入门基础-VC网络编程入门
  4. 由塔科马大桥事件 谈软件架构
  5. 博主应邀参加YOCSEF虚拟化技术论坛
  6. 在.NET 6 中如何创建和使用 HTTP 客户端 SDK
  7. .NET6之MiniAPI(十八):OpenAPI swagger
  8. WPF 实现加速小火箭~
  9. 30分钟通过Kong实现.NET网关
  10. 50个Android应用!Win11支持运行了