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

在一次.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中加入另外的代码。

640?wx_fmt=png

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

  640?wx_fmt=jpeg

  开始控制日志记录级别:

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

640?wx_fmt=png

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

640?wx_fmt=png

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

640?wx_fmt=png

异常信息加载出来。

  640?wx_fmt=png

  出现异常,拦截异常,记录日志信息,不单单在这里,在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组件而提前写入的,可以忽略。

640?wx_fmt=png

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

 利用这种方式下的日志输出。    640?wx_fmt=png

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

640?wx_fmt=png

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

  640?wx_fmt=png

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

  640?wx_fmt=jpeg

 

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

640?wx_fmt=png

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

  640?wx_fmt=png

  具体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服务器地址。

640?wx_fmt=png

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

  640?wx_fmt=png

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

  640?wx_fmt=png

  640?wx_fmt=png

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

  640?wx_fmt=png   

  可是,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外部端口无法映射到内部端口,糟心,可是应该不是大问题,就此也就不弄日志信息的展示了。

  640?wx_fmt=png

  至此,日志相关的一系列知识简单带过,关键是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

640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/320977.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Apache SkyWalking的架构设计【译文】

Apache SkyWalking提供了一个功能强大并且很轻量级的后端。在此,将介绍为什么采用以下方式来设计它,以及它又是如何工作的。架构图对于APM而言,agent或SDKs仅是如何使用libs的技术细节。手动或自动的形式与架构无关,因此在本文中&…

通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core?

什么是.NET?什么是.NET Framework?本文将从上往下,循序渐进的介绍一系列相关.NET的概念,先从类型系统开始讲起,我将通过跨语言操作这个例子来逐渐引入一系列.NET的相关概念,这主要包括:CLS、CTS(CLI)、FCL…

.Net Core小技巧 - Hosted Services + Quartz实现定时任务调度

背景之前一直有朋友问,.Net Core Linux环境有没有类似Windows服务的东西。其实是有的,我了解的方法有两种:#1 创建一个ASP.Net Core的Web项目(如Web API),然后通过添加中间件(Middleware&#…

在.NET Core微服务中使用HostBuilder和Generic Host

基于控制台的服务中探索一个简单模式,以解决跨领域问题。“通用” Host和HostBuilder是随.NET Core 2.1发布而发布的新功能组件的组件。它们的一个用例是通过提供用于添加横切关注点(例如依赖注入,配置和日志记录)的模式来简化基于…

EntityFramework Core进行读写分离最佳实践方式,了解一下?

本来打算写ASP.NET Core MVC基础系列内容,博客评论有园友提出讲讲读写分离,这个问题提的好。大多数情况下,对于园友在评论中提出的问题,如果是值得深究或者大多数同行比较关注的问题我都会私下去看看,然后进行对应解答…

小X的加法难题

小X的加法难题 题目大意&#xff1a; 一个AB的式子&#xff0c;但之间有一些没用的空格&#xff0c;要你求出结果 原题&#xff1a; 解题思路&#xff1a; 字符输入&#xff0c;有数字就存起来&#xff0c;用加号和换行符来分开 代码&#xff1a; #include<cstdio>…

【桶排】小 X 的密码破译

小 X 的密码破译 题目大意&#xff1a; 有一堆式子&#xff0c;去重再排序后&#xff0c;按规则求出结果 原题&#xff1a; 解题思路&#xff1a; 把每一个求出来的数丢到桶里&#xff0c;然后跑一遍就可以了 代码&#xff1a; #include<cstdio> using namespace s…

Uva12325 Zombie's Treasure Chest [二分区间+模拟退火]

Zombie’s Treasure Chest 题目链接 https://cn.vjudge.net/problem/UVA-12325 题意 两种物品无穷多个,第一种物品重量s1s_1s1​,价值v1v_1v1​,第二种物品重量s2s_2s2​,价值v2v_2v2​,背包重nnn,求能装的最大价值之和. 数据全都是2e92e92e9.也就是两种物品的完全背包. 题…

Identity Server 4 预备知识 -- OpenID Connect 简介

我之前的文章简单的介绍了OAuth 2.0 (在这里: 要用Identity Server 4 -- OAuth 2.0 超级简介, 还不是很全.这篇文章我要介绍一下 OpenID Connect.OAuth 2.0 不是身份认证协议OAuth 2.0 不是身份认证(Authentication)协议. 为什么有人会认为OAuth 2.0具有身份认证的功能? 这是因…

Ocelot.JwtAuthorize:一个基于网关的Jwt验证包

Ocelot作为基于.net core的API网关&#xff0c;有一个功能是统一验证&#xff0c;它的作用是把没有访问权限的请求挡在API网关外面&#xff0c;而不是到达API网关事端的API时才去验证&#xff1b;之前我有一篇博文Ocelot统一权限验证&#xff0c;作过说明&#xff0c;这篇博文说…

【并查集】小 X 的液体混合

小 X 的液体混合 题目大意&#xff1a; 在一个玻璃瓶里&#xff0c;放入一些液体&#xff0c;某一对液体放在一起会有反应&#xff0c;当某个液体有反应时危险度就会乘2&#xff08;初值为1&#xff09;&#xff0c;问危险度最大是多少 原题&#xff1a; 解题思路&#xff1…

Swagger如何访问Ocelot中带权限验证的API

先亮源代码&#xff1a;https://github.com/axzxs2001/Asp.NetCoreExperiment/tree/master/Asp.NetCoreExperiment/SwaggerDemo这篇博文不是对asp.net core中使用Swagger作介绍&#xff0c;因为社区博客作了详细说明。今天主要说一下Swagger在Ocelot网关权限验证模式下的访问&a…

etcd-workbench一款免费好用的ETCD客户端,支持SSHTunnel、版本对比等功能

介绍 今天推荐一款完全免费的ETCD客户端&#xff0c;可以私有化部署: etcd-workbench 开源地址&#xff1a;https://github.com/tzfun/etcd-workbench Gitee地址&#xff1a;https://gitee.com/tzfun/etcd-workbench 下载 本地运行 从 官方Release 下载最新版的 jar 包&am…

深度学习中反向传播算法简单推导笔记

反向传播算法简单推导笔记 1.全连接神经网络 该结构的前向传播可以写成: z(1)W(1)xb(1)z^{(1)} W^{(1)}xb^{(1)}z(1)W(1)xb(1) a(1)σ(z(1))a^{(1)} \sigma(z^{(1)})a(1)σ(z(1)) z(2)W(2)a(1)b(2)z^{(2)}W^{(2)}a^{(1)}b^{(2)}z(2)W(2)a(1)b(2) a(2)σ(z(2))a^{(2)} \sigm…

EntityFramework Core进行读写分离最佳实践方式,了解一下(二)?

写过上一篇关于EF Core中读写分离最佳实践方式后&#xff0c;虽然在一定程度上改善了问题&#xff0c;但是在评论中有的指出更换到从数据库。那么接下来要进行插入此时又要切换到主数据库&#xff0c;同时有的指出是否可以进行底层无感知操作&#xff0c;这确实是个问题&#x…

一文搞清到底什么是 .NET?

现在各种 .NET 满天飞&#xff0c;别说新手了&#xff0c;连我这样的老手都差点被绕进去。到底什么是 .NET 呢&#xff1f;通俗易懂&#xff0c;什么是.NET?什么是.NET Framework&#xff1f;什么是.NET Core? 这篇文章好长呀&#xff0c;不知道你看完了没有&#xff0c;其实…

Service Mesh新成员:Consul 1.2

本文译自 HashiCorp 官网关于 Consul 1.2 支持 Service Mesh 发布的博客文章。原文链接&#xff1a;https://www.hashicorp.com/blog/consul-1-2-service-mesh作者&#xff1a;Mitchell Hashimoto 翻译&#xff1a;董干 转载自&#xff1a;https://blog.idevfun.io/consul-1-2-…

VAE(变分自编码器)学习笔记

VAE学习笔记 普通的编码器可以将图像这类信息编码成为特征向量. 但通常这些特征向量不具有空间上的连续性. VAE(变分自编码器)可以将图像信息编码成为具有空间连续性的特征向量. 方法是向编码器和解码器中加入统计信息,即特征向量代表的的是一个高斯分布,强迫特征向量服从高…

小 X 的 AK 计划

小 X 的 AK 计划 题目大意&#xff1a; 有n个点&#xff0c;到一个点&#xff08;时间为距离&#xff09;并花一些时间可以A掉此点&#xff0c;问最多可以A多少个点 原题&#xff1a; 解题思路&#xff1a; 先按位置从小到大排序&#xff0c;然后到每一个点并A掉的时间加在…

.NET Core 2.1的重大缺陷延长了.NET Core 2.0的寿命

微软近日宣布&#xff0c;.NET Core 2.0 即将 "寿终正寝"&#xff0c;对它的支持将在2018年10月1日结束。.NET Core 2.0 是一个非长期支持&#xff08;LTS&#xff09;的版本&#xff0c;因此微软的承诺是在下一个版本发布的三个月之后结束对它的支持。由于 .NET Cor…