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

.net 5.0 中的 JsonConsole相关推荐

  1. as3.0中如何阻止事件冒泡?

    as3.0中的事件冒泡机制有时候会很烦人,比如一个Sprite(方便下文描述就命名为Container吧)把另一外Sprite(称为Child吧)做为子元素套进来以后,如果两个Sprite都注册了Mo ...

  2. ATS 5.3.0中开启最高级别的缓存调试信息

    近来在pptv,letv之类的站点响应中看到via头中有非常详细的缓存信息,我研究了一下,原来是ATS默认就支持的,以ATS 5.3.0中为例,修改records.config中的如下配置项: CON ...

  3. ATS 5.3.0中利用grep得到纯净的配置文件

    ATS 5.3.0中的配置文件通常会标有详细的注释,但是我们有时候需要纯净的配置文件,特别是在线上部署的配置文件,不需要这么详细的注释.下面是处理过程. cat records.config | gr ...

  4. 在ASP.NET 2.0中使用样式、主题和皮肤

    ASP.NET 2.0的主题和皮肤特性使你能够把样式和布局信息存放到一组独立的文件中,总称为主题(Theme).接下来我们可以把这个主题应用到任何站点,用于改变该站点内的页面和控件的外观和感觉.通过改 ...

  5. asp.net 2.0中设定默认焦点按钮

    在asp.net 1.1中,当要在page_load页面中,设置某个控件为默认的焦点按钮(也就是默认焦点是在这个控件上的),可能要用到javascript的代码,而在ASP.NET 2.0中,不用这些 ...

  6. asp.net 2.0中的弹出对话框

    在asp.net 1.1中,要做1个弹出的对话框的话,一般是在服务端的代码中这样写: btnClick.Attributes.Add("onclick", "return ...

  7. 在ASP.NET 2.0中建立站点导航层次

    站点导航提供程序--ASP.NET 2.0中的站点导航提供程序暴露了应用程序中的页面的导航信息,它允许你单独地定义站点的结构,而不用考虑页面的实际物理布局.默认的站点导航提供程序是基于XML的,但是你 ...

  8. ASP.NET2.0中的ClientScriptManager 类用法—如何添加客户端事件!

    在ASP.NET2.0中,ClientScriptManager 类通过键 String 和 Type 唯一地标识脚本.具有相同的键和类型的脚本被视为重复脚本.因此,我们可以使用脚本类型来避免混淆可能 ...

  9. asp.net 2.0中一次性更新所有GRIDVIEW的记录

    在asp.net 2.0中,gridview控件是十分不错的控件.有的时候,可能一个GRIDVIEW控件中 的各行都是文本框,如何一次性更新所有修改过的记录呢?有两种方法,一种是使用sqldataso ...

最新文章

  1. 设计模式之五 责任链模式(Chain of Responsibility)
  2. auto.js停止所有线程_十年架构师带你快速上手多线程
  3. 技术面试问项目难题如何解决的_同轴线如何当网线使用?解决改造项目中难题...
  4. mysql ignore errors_mysql的又一个让人捉摸不透的bug?
  5. Bootstrap 导航条的组件
  6. xilinx芯片管脚使用限制_【转载】 Xilinx FPGA配置的一些细节
  7. 三次样条插值_2.6 三次样条插值
  8. HDU 5879 Cure -2016 ICPC 青岛赛区网络赛
  9. pyhook安装说明
  10. 夺命雷公狗---javascript NO:27 通过json调用12306查询车次信息
  11. 如何用电话扩大Android内存,扩大内存 Android开启App2SD+教程
  12. 3D游戏:三、空间与运动
  13. 表单实现登录注册功能
  14. 强化学习训练营-学习笔记
  15. python报错“ImportError: The _imagingft C module is not installed”
  16. python日历下拉框_c#教程之C#日历样式的下拉式计算器实例讲解
  17. Anaconda环境下安装opencv
  18. Linux(Centos7)下,阿帕奇(Apache)服务器的安装与配置
  19. 华为云开发者日震撼来袭!11月20日,上海见
  20. JVM内存管理--笔记

热门文章

  1. MATLAB数值计算与符号运算
  2. LeetCode 581. 最短无序连续子数组(Shortest Unsorted Continuous Subarray)
  3. 程序员必须知道的HTML常用代码有哪些?
  4. 32 commons-lang包学习
  5. 妄想性仮想人格障害 新手教程 +改动器
  6. Ubuntu 下配置 NFS
  7. python 字典操作
  8. ListBox类似组件,鼠标右键点击事件得到选中Item
  9. 如何使用SkyDrive的25 GB作为映射驱动器以方便访问
  10. 如何在Windows 10上设置默认Linux发行版