Asp.Net Core 轻松学-利用日志监视进行服务遥测

 

前言

    在 Net Core 2.2 中,官方文档表示,对 EventListener 这个日志监视类的内容进行了扩充,同时赋予了跟踪 CoreCLR 事件的权限;通过跟踪 CoreCLR 事件,比如通过跟踪 CoreCLR 事件,可以了解和收集到比如 GC,JIT,ThreadPool,intreop 这些运行时服务的行为;通过使用配置注入,我们将获得一种动态跟踪事件的能力。

1. EventListener 介绍

1.1 EventListener 中文直译为:事件侦听器

EventListener 位于程序集 System.Diagnostics.Tracing 中,该类提供了一组启用/禁用的方法,按照惯例,先来看一下源代码,了解一下其结构

    public abstract class EventListener : IDisposable     {         protected EventListener();          public event EventHandler<EventSourceCreatedEventArgs> EventSourceCreated;                 public event EventHandler<EventWrittenEventArgs> EventWritten;          protected static int EventSourceIndex(EventSource eventSource);                 public void DisableEvents(EventSource eventSource);                 public virtual void Dispose();                 public void EnableEvents(EventSource eventSource, EventLevel level);                 public void EnableEvents(EventSource eventSource, EventLevel level, EventKeywords matchAnyKeyword);                 protected internal virtual void OnEventWritten(EventWrittenEventArgs eventData);     }

从类结构中可以看出,EventListener 中的方法并不多,而且从名字都可以推断出其行为,
因为该类是一个抽象类,并不能直接使用,接下来我们创建一个 ReportListener 类继承它

2. 创建自定义事件侦听器
 public class ReportListener : EventListener     {         public ReportListener() { }          public Dictionary<string, ListenerItem> Items { get; set; } = new Dictionary<string, ListenerItem>();         public ReportListener(Dictionary<string, ListenerItem> items)         {             this.Items = items;         }          protected override void OnEventSourceCreated(EventSource eventSource)         {             if (Items.ContainsKey(eventSource.Name))             {                 var item = Items[eventSource.Name];                 EnableEvents(eventSource, item.Level, item.Keywords);             }         }          protected override void OnEventWritten(EventWrittenEventArgs eventData)         {             if (Items.ContainsKey(eventData.EventSource.Name))             {                 Console.WriteLine($"ThreadID = {eventData.OSThreadId} ID = {eventData.EventId} Name = {eventData.EventSource.Name}.{eventData.EventName}");                 for (int i = 0; i < eventData.Payload.Count; i++)                 {                     
                        
关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信