.net 5.0 中的 JsonConsole

asp.net core 5.0 中的 JsonConsole

Intro

asp.net core 5.0 中日志新增了 JsonConsole,还是输出日志到 Console,但是会应用 Json 格式的一个 Formatter 把日志格式化成 json 再输出到控制台

Sample

一起来看一个示例,以我的一个小项目为例子来演示,默认的 console 日志格式是多行的,不够结构化,想要进行加工的话就会比较麻烦,不能很方便的进行加工和扩展,而 JSON 则是一种相对来说比较结构化的数据,相对来说进行扩展就比较方便了。

来看一下默认日志输出效果:

default console log

如图所示,一条日志默认是两行,第一行是日志级别和日志对应的 CategoryNameEventId,第二行是日志的具体内容

接着我们来使用一下 JsonConsole,配置方式如下,可以在 Program.cs 调用(推荐)

json console configure

再来看输出的日志:

json console log

可以看到现在的日志已经是 JSON 了,每一条日志都是一个 JSON

Implement

它的实现在于一个 JsonConsoleFormatter,是基于 System.Text.Json 来实现的 Json 格式化,

我们也可以实现自己的 ConsoleFormatter 来自定义 Console 的日志格式,详细实现可以参考:<https://github.com/dotnet/runtime/blob/v5.0.0/src/libraries/Microsoft.Extensions.Logging.Console/src/JsonConsoleFormatter.cs

扩展方法实现https://github.com/dotnet/runtime/blob/v5.0.0/src/libraries/Microsoft.Extensions.Logging.Console/src/ConsoleLoggerExtensions.cs:

AddJsonConsole 扩展实现:

AddJsonConsole

AddConsoleWithFormatter 实现:

AddConsoleWithFormatter

AddConsole 实现:

AddConsole

More

在之前的版本,如果想要把日志格式化成 JSON 输出到控制台,需要使用第三方的日志框架把日志序列化成 JSON,有了 JsonConsoleFormatter 之后我们就可以很方便的将日志格式化成 JSON 输出到控制台了。

日志输出为 JSON 之后,想要对日志进行扩展和补充就会很容易,我们的应用目前使用的 .netcore 3.1,使用 nlog 把日志格式化成 JSON 输出到控制台,再通过 Fluentd 收集到 es,收集的同时会把应用所在的 k8s 环境信息如containerName, podName,clusterName 等也 Patch 到日志信息中

示例使用了默认的配置,我们也可以通过带 action 的重载扩展方法自定义 Json 格式化的配置

Reference

  • https://docs.microsoft.com/en-us/aspnet/core/release-notes/aspnetcore-5.0?view=aspnetcore-5.0#console-logger-formatter

  • https://github.com/WeihanLi/SparkTodo

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

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

相关文章

采用开源软件搭建WebGIS系统(6)数据格式

[本文版权由xiaotievip.sina.com所有&#xff0c;转载需得到作者同意。] 在国家基础地理信息中心下载到的数据格式是Shape file数据。Shape file数据由3个文件构成&#xff0c;*.shp&#xff0c;*.dbf和*.shx&#xff0c;分别存储空间数据、属性数据和两者间的关系。*.shp得专门…

java 按符号分割字符串_JAVA字符串按分隔符号字符串分割

在处理有规律的字符串的时候.有些字符串分割需要注意了..如下例子:public class Split {public static void main(String[] args) {String str1 "1,2,3,4,5";String str2 "1,2,3,4,";String str3 "1,,2,3,";String str4",,,,";System.…

.NET Core 使用Topshelf方式创建Windows服务

Topshelf是一个.NET Standard库&#xff0c;它消除了在.NET Framework和.NET Core中创建Windows服务的那些麻烦。安装Install-Package Topshelf代码using System; using System.Collections.Generic; using System.Text; using Topshelf;namespace ConsoleApp2222 {public clas…

用VC++修改注册表----让我们踏出第一步(适合初学者)

用VC修改注册表----让我们踏出第一步(适合初学者)转载自&#xff1a;www.csdn.net 开场白 你是不是非常期待通过自己的双手&#xff0c;写出一个有模有样的&#xff02;系统修改&#xff08;维护&#xff09;工具软件&#xff02;&#xff1f;我想答案应该是肯定的&…

Repeater分页

//ASP.NET中的DataList和Repeater提供了简单快速的方法來显示,其间&#xff0c;我们可以使用<ItemTemplate>更是使我们能随心所欲的控制数据的排放样式&#xff01;//.可惜的是它们不像Datagrid那样&#xff0c;有内置的分页功能。////如何解决呢&#xff1f;////其实我们…

单一职责在.NET中

单一职责是降低耦合度的指导思想&#xff0c;适用于一个微服务&#xff0c;一个类型&#xff0c;一个方法。微服务层&#xff1a;微服务一般按业务的领域来进行拆分&#xff1a;药房微服务就是药房的业务&#xff0c;护士站微服务就是护士站的业务&#xff0c;广义上没有什么问…

PDG转PDF的方法

下面是我在“小文论坛”发的关于PDG转PDF的办法转贴请注明出自“小文论坛”.点击链接访问小文论坛前些天在坛子里看到一位朋友发的通过代理登录教育网超星的办法,试了试,还不错,下下来了几本吉他方面和计算机方面的书。但下下来的书是加密保存的&#xff0c;当该用户过期后又怎…

Roslyn 使用 Directory.Build.props 管理多个项目配置

在一些大项目需要很多独立的仓库来做&#xff0c;每个仓库之间都会有很多相同的配置&#xff0c;本文告诉大家如何通过 Directory.Build.props 管理多个项目配置在我的 MVVM 框架需要三个不同的库&#xff0c;一个是 Framework 另外两个是 WPF 和 UWP 这三个库有很多重复的配置…

java 中符号_谁能告诉我java中符号的用法,见代码

展开全部大家都知道Vector以及其他的容器可以不加任何修饰地e68a8462616964757a686964616f31333236373765存储任何类型的对象,这给我们带来了极大的方便&#xff0c;也使得容器很容易被复用&#xff0c;但是大多数时候我们可能需要只能存储某一类型对象的Vector&#xff0c;这是…

彻底堕落了一回——大三篇

转载于:https://www.cnblogs.com/wuwa/archive/2005/06/21/6191772.html

在.NET Core中使用Channel(一)

我最近一直在熟悉.net Core中引入的新Channel<T>类型。我想在它第一次发布的时候我了解过它&#xff0c;但是有关文章非常非常少&#xff0c;我不能理解它们与其他队列有什么不同。在使用了一段时间后&#xff0c;我终于看到了它们的吸引力和真正的力量。最值得注意的是大…

java控制系统音量_Java 控制 Windows 系统音量-Go语言中文社区

目录1、使用 Java 来控制 Windows 系统音量&#xff0c;使用 JNA 调用 windows 底层 API 因为有点麻烦&#xff0c;所以这里采用纯 Java API结合 VBS 脚本的方式进行控制。2、可以参考《VBS 控制 Windos 系统音量 及视频播放》&#xff0c;本文同样是利用 VBS 来控制&#xff0…

无题

今天开会&#xff0c;其实不开都知道要讲啥&#xff0c;教代会上就是讨论关于薪金的问题&#xff0c;钱拿的越来越少&#xff0c;所以要想拿钱的话只有写论文&#xff0c;带比赛&#xff0c;或参加比赛&#xff0c;获奖后才能有钱发&#xff0c;哎~~~昨天晚上xz说她确定要ky&am…

【Hook】postman工具的代码生成工具让它锦上添花

修改postman工具的代码生成工具加入response自动生成POJO代码如上图可以快速把请求这个动作转成code&#xff0c;减少重复性劳动。但是有一点我觉得可以优化下 就是返回的json如果也能自动转成代码就好了。不然在需要把json序列化成java或者csharp的POJO对象时还得自己coding转…

2005/7/15[随便写写]

通过面试开始在公司正式上班了&#xff0c;去的很早&#xff0c;呵呵&#xff0c;以为里面的员工都需要敲卡的&#xff0c;不想给大家一个坏印象。环境么给我的感觉氛围很不错&#xff0c;没有传统IT行业那种被项目赶得焦头烂额的样子&#xff0c;可是我的性格决定了我不是那种…

java nature_Java Nature.nsf方法代码示例

import com.hankcs.hanlp.corpus.tag.Nature; //导入方法依赖的package包/类/*** 执行识别* param segResult 粗分结果* param wordNetOptimum 粗分结果对应的词图* param wordNetAll 全词图*/public static void Recognition(List segResult, WordNet wordNetOptimum, WordNet…

使用BeetleX.ESDoc构建文档搜索功能

BeetleX.ESDoc组件是基于ElasticSearch服务的文档搜索扩展组件。它在BeetleX.Elasticsearch的基础上包装一些基于文档检索的功能和方法&#xff0c;可以让你在不了解ElasticSearch API的情况下直接存储&#xff0c;删除和搜索相关信息。信息结构BeetleX.ESDoc定义了一个基础的文…

java在文件的后面添加_java 在file的尾部添加数据的两种方法总结

java 在file的尾部添加数据的两种方法总结问题描述:在文件的末尾追加内容方法1:利用RandomAccessFile类1.将randomAccessFile模式设置为rw2将randomAccessFile移动(seek)到文件末尾3追加数据4关闭流方法2:利用FileWriter类1.将FileWriter构造方法第二个参数置为true.表示在尾部…

日产汽车源码遭泄露

喜欢就关注我们吧&#xff01;日产北美公司开发和使用的移动应用及内部工具的源代码于近日在网上泄露&#xff0c;原因是该公司错误配置了其中一台 Git 服务器。瑞士软件工程师 Tillie Kottmann 向 ZDNet 透露&#xff0c;此次泄露源于一台配置错误的 Bitbucket Git 服务器的信…

开源纯C#轻量级数据库引擎:SharpHSQL 1.0.3.0版本

开源纯C#轻量级数据库引擎&#xff1a;SharpHSQL 1.0.3.0版本出了&#xff12;个多月了&#xff0c;我一直没有给大家报道&#xff0c;这是目前唯一发现的用纯C#开发的稳定的轻量级数据库引擎&#xff0c;在我的建议下&#xff0c;已经支持Unicode&#xff0c;包括简体中文了。…