System.Diagnostics.DiagnosticSource 是一个可以对代码进行检测的模块,可以丰富地记录程序中地日志,包括可序列化的类型(例如 HttpResponseMessage 或 HttpContext)。

System.Diagnostics.DiagnosticSource 通过订阅发布模式运行,我们可以根据自己地需要发现数据源并订阅感兴趣的数据源。

DiagnosticSource 与 ILogger 区别

一般来说,DiagnosticSource强类型诊断。它可以记录诸如"Microsoft.AspNetCore.Mvc.BeforeViewComponent"和 之类的事件"Microsoft.AspNetCore.Mvc.ViewNotFound"。

相反,ILogger用于记录更具体的信息,例如"Executing JsonResult, writing value {Value}。

示例

添加必要的依赖项

我们首先将需要的 NuGet 包添加到我们的project中

<PackageReference Include="Microsoft.Extensions.DiagnosticAdapter" Version="3.1.32" />

发出Event

首先需要注入DiagnosticSource, 然后通过其write方法发出Event

private readonly ILogger<WeatherForecastController> _logger;
private readonly DiagnosticSource _diagnosticSource;
const string DKEY = "Invoke_WeatherForecast";
public WeatherForecastController(ILogger<WeatherForecastController> logger, DiagnosticSource diagnosticSource)
{
_logger = logger;
_diagnosticSource = diagnosticSource;
} [HttpGet]
public string Get()
{
if (_diagnosticSource.IsEnabled(DKEY))
{
_diagnosticSource.Write(DKEY,
new
{
time = DateTime.Now,
data = "ttt"
});
}
return "OK";
}

定义Listener

有多种方法可以创建使用DiagnosticSource事件的Listener,但最简单的方法之一是使用Microsoft.Extensions.DiagnosticAdapter包提供的功能。

要创建侦听器,您可以创建一个类。然后,您可以使用属性来装饰该方法[DiagnosticName],并提供要侦听的事件名称:

public class DemoDiagnosticListener
{
const string DKEY = "Invoke_WeatherForecast";
[DiagnosticName(DKEY)]
public virtual void CallWeatherForecast (DateTime time, string data)
{
Console.WriteLine($"WeatherForecast called: {time} {data}");
}
}

启动监听

剩下的就是在Program.cs中启动监听

var app = builder.Build();

var diagnosticListener = app.Services.GetRequiredService<DiagnosticListener>();
var listener = new DemoDiagnosticListener();
diagnosticListener.SubscribeWithAdapter(listener); ... app.Run();

效果

.Net Core中使用DiagnosticSource进行日志记录的更多相关文章

  1. 在 ASP.NET Core 中使用 Serilog 进行日志记录

    目录 从 NuGet 安装 Serilog 在 Main函数 中配置 Serilog 在项目中使用 Serilog 进行日志输出 从 NuGet 安装 Serilog 核心的包是 Serilog 和 ...

  2. Net Core平台灵活简单的日志记录框架NLog+SqlServer初体验

    Net Core平台灵活简单的日志记录框架NLog+SqlServer初体验 前几天分享的"[Net Core平台灵活简单的日志记录框架NLog+Mysql组合初体验][http://www ...

  3. Net Core平台灵活简单的日志记录框架NLog+Mysql组合初体验

    Net Core平台灵活简单的日志记录框架NLog初体验 前几天分享的"[Net Core集成Exceptionless分布式日志功能以及全局异常过滤][https://www.cnblog ...

  4. [转]asp.net5中使用NLog进行日志记录

    本文转自:http://www.cnblogs.com/sguozeng/articles/4861303.html asp.net5中使用NLog进行日志记录 asp.net5中提供了性能强大的日志 ...

  5. .net core 中使用Log4net输出日志到Mysql数据库中

    .net core 中使用Log4net输出日志到数据库中去 1.使用Nuget安装log4net 和 mysql.data 2.设置log4net 的配置文件 log4net.config 可以设置 ...

  6. 在 .NET Core 中使用 DiagnosticSource 记录跟踪信息

    前言 最新一直在忙着项目上的事情,很久没有写博客了,在这里对关注我的粉丝们说声抱歉,后面我可能更多的分享我们在微服务落地的过程中的一些经验.那么今天给大家讲一下在 .NET Core 2 中引入的全新 ...

  7. 在 .NET Core 中使用 Diagnostics (Diagnostic Source) 记录跟踪信息

    前言 最新一直在忙着项目上的事情,很久没有写博客了,在这里对关注我的粉丝们说声抱歉,后面我可能更多的分享我们在微服务落地的过程中的一些经验.那么今天给大家讲一下在 .NET Core 2 中引入的全新 ...

  8. 在.NET Core中使用Exceptionless分布式日志收集框架

    一.Exceptionless简介 Exceptionless 是一个开源的实时的日志收集框架,它可以应用在基于 ASP.NET,ASP.NET Core,Web Api,Web Forms,WPF, ...

  9. .net core使用ocelot---第三篇 日志记录

    简介 .net core使用ocelot---第一篇 简单使用 .net core使用ocelot---第二篇 身份验证使用 上篇介绍使用asp.net core 创建API网关.本文将介绍Ocelo ...

  10. NET5 EF Core添加EF生成SQL日志记录

    1.添加NuGet包:Microsoft.Extensions.Logging.Debug 2.添加单独类库用于后期维护:BCode.DataBase.Log 3.添加EFCoreLoggerProv ...

随机推荐

  1. 释放搜索潜力:基于ES(ElasticSearch)打造高效的语义搜索系统,让信息尽在掌握

    释放搜索潜力:基于ES(ElasticSearch)打造高效的语义搜索系统,让信息尽在掌握[1.安装部署篇--简洁版],支持Linux/Windows部署安装 效果展示 PaddleNLP Pipel ...

  2. 强化学习从基础到进阶-案例与实践[3]:表格型方法:Sarsa、Qlearning;蒙特卡洛策略、时序差分等以及Qlearning项目实战

    强化学习从基础到进阶-案例与实践[3]:表格型方法:Sarsa.Qlearning:蒙特卡洛策略.时序差分等以及Qlearning项目实战 策略最简单的表示是查找表(look-up table),即表 ...

  3. 快递单中抽取关键信息【一】----基于BiGRU+CR+预训练的词向量优化

    相关文章: 1.快递单中抽取关键信息[一]----基于BiGRU+CR+预训练的词向量优化 2.快递单信息抽取[二]基于ERNIE1.0至ErnieGram + CRF预训练模型 3.快递单信息抽取[ ...

  4. 《Java 面经手册》PDF,417页11.5万字,完稿!

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 我膨胀了 ,在看了大部分以面试讲解的 Java 文章后,发现很多内容的讲解都偏向于翻 ...

  5. [zookeeper] 集群搭建及启动后查询服务器状态异常解决

    一.集群搭建 1.每台服务器上部署zookeeper 1.将zookeeper压缩包解压到指定位置,在zookeeper解压后目录下创建数据目录zkData 2.在zkData下创建myid文件,内容 ...

  6. 程序员必备技能:一键创建windows 服务

    使用windows开发或者使用windows服务器的朋,应该经常会遇到有些程序要开机启动,或者有些服务要持续执行. 这样最稳定可靠的,就是把程序创建为windows服务. 以下bat脚本,仅供参考. ...

  7. Java并发(十四)----悲观互斥与乐观重试

    1. 悲观互斥 互斥实际是悲观锁的思想 例如,有下面取款的需求 interface Account {    // 获取余额    Integer getBalance(); ​    // 取款   ...

  8. 一个关于用netty的小错误反思

    一个关于用netty的小认知 在使用netty时,观看了黑马的netty网课,没想就直接用他的依赖了 依赖如下 <dependency> <groupId>io.netty&l ...

  9. Java微服务SpringCloud+Uniapp+Vue3+Element Plus开源BizSpring商城

    产品介绍 BizSpring电商平台概述 BizSpring电商平台,是基于最新Spring Cloud 微服务架构开发的多语言电商平台,使用领先的 Vue3.0+ElementPlus + unia ...

  10. NC15557 连续区间的最大公约数

    题目链接 题目 题目描述 给一个数列共n(n<=100,000)个数,a1,a2,...,an.(0<=ai<=1000,000,000).有q(q<=100,000)个询问. ...