首页 > 其他分享 >.Net Core中使用DiagnosticSource进行日志记录

.Net Core中使用DiagnosticSource进行日志记录

时间:2024-03-12 14:56:31浏览次数:32  
标签:Core string DKEY public DiagnosticSource Net logger diagnosticSource

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();

 

效果

 

标签:Core,string,DKEY,public,DiagnosticSource,Net,logger,diagnosticSource
From: https://www.cnblogs.com/chenyishi/p/18068309

相关文章

  • 如何在Visual Studio中调试.NET源码
    今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。我一般的做法是先判断是否为null,再判断Count。看了一下Count的源码如下:1[__DynamicallyInvokable]2publicintCount3{4[__DynamicallyInvokable]5get6......
  • C++ Qt开发:QNetworkAccessManager网络接口组件
    Qt是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用QNetworkAccessManager组件实现Web网页访问。QNetworkAccessManager是Qt网络模块中的关......
  • 在不受支持的 Mac 上安装 macOS Sonoma (OpenCore Legacy Patcher v1.4)
    在不受支持的Mac上安装macOSSonoma(OpenCoreLegacyPatcherv1.4)InstallmacOSonunsupportedMacs请访问原文链接:https://sysin.org/blog/install-macos-on-unsupported-mac/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgOpenCoreLegacyPatcher1.4.2ch......
  • cnetos7 ISO 镜像自定义制作
    简介:  此自定义镜像针对centos7系统版本,通过tar打包原系统服务将其放入ISO镜像中在安装时执行解压导入新安装系统中实现系统服务的自定义安装。针对cnetos7目前只测试出这一种方案,暂时没找到其他好的方案实现系统的模板ISO制作,目前版本存在缺陷镜像中的tar包非加密......
  • Linux之ps -ef进程命令及netstat网络状态命令简记
    ps-ef释义:ps-ef表示查看全格式的全部进程。ps是linux下最常用的也是非常强大的进程查看命令,常配合管道命令|和查找命令grep同时执行来查看特定进程。参数含义:-e显示所有进程。-f全格式。-h不显示标题。-l长格式。-w宽输出。a显示终端上的所有进程,包括其他用户的......
  • kubernetes-服务器重启后集群检查
    kubernetes-服务器重启后集群检查搭建k8s集群的服务器因机房断电原因挂掉。以下是恢复后的常规检查检查k8s的master组件服务systemctlstatuskube-apiserver.servicekube-controller-manager.servicekube-scheduler.service检查k8s的node组件服务systemctlstatuskubel......
  • .NET Framework 4.8 Web API+Entity Framework(实现增删改查)
    1、首先,创建一个新的.NETFramework4.8WebAPI项目。2、定义Student类:publicclassStudent{publicintId{get;set;}publicstringName{get;set;}publicintAge{get;set;}}3、创建DbContext类:usingSystem.Data.Entity;publicclassS......
  • NET应用UI框架DevExpress XAF v23.2新版亮点 - 支持.NET 8
    DevExpressXAF是一款强大的现代应用程序框架,允许同时开发ASP.NET和WinForms。DevExpressXAF采用模块化设计,开发人员可以选择内建模块,也可以自行创建,从而以更快的速度和比开发人员当前更强有力的方式创建应用程序。在DevExpressXAF v23.2新版中全新发布了支持.NET8、DevExpre......
  • 使用 .NET Core 构建实时数据处理应用程序
    第一部分:了解实时数据处理实时数据处理是指立即处理数据输入的过程,这对于需要快速响应的应用程序至关重要。在.NETCore环境中,我们可以利用其高性能、跨平台的特性来构建高效的实时数据处理应用程序。理论事件驱动架构:这是一种软件架构模式,通过事件来触发和通信,从而实现高度......
  • Asp .Net Web Forms 系列:配置图片防盗链的几种方法
    通过URLRewriteModule组件URLRewriteModule是一个用于在ASP.NETWebForms或其他基于IIS的Web应用程序中重写URL的强大工具。这个模块允许你将复杂的、不易于记忆或不利于搜索引擎优化的URL转换为更简洁、更友好的格式。通过URL重写,你可以提高网站的用户体验,......