Asp.Net Core轻松学之利用日志监视进行服务遥测详
走进Asp.Net Core的世界:如何利用日志监视轻松进行服务遥测?
一、前言
在Net Core 2.2中,官方对日志监视进行了进一步的丰富和优化,其中关于EventListener这个类的更新尤为引人注目。这个更新赋予了开发者跟踪CoreCLR事件的权限,让开发者能够更深入地理解服务的内部运行过程。
二、日志监视的核心价值:了解服务的“幕后故事”
在Asp.Net Core中,日志监视是一个强大的工具,可以帮助我们了解和监控服务的行为。通过日志监视,我们可以捕捉到诸如GC(垃圾回收)、JIT(即时编译)、ThreadPool(线程池)以及interop(跨语言交互操作)等运行时服务的行为信息。这些信息对于服务的优化和调试非常有价值。通过深入分析这些信息,我们可以对服务进行更精准的调优,提高服务的性能和稳定性。这也是一种重要的服务遥测手段,可以帮助我们了解服务的健康状况和运行状况。
三、动态跟踪事件的能力:配置注入的力量
EventListener介绍与应用实践
在程序开发中,EventListener是一个关键组件,用于监听和处理事件。本文将详细介绍EventListener的工作原理,并通过一个实践案例展示如何创建自定义事件侦听器以及如何使用它。
一、EventListener概述
EventListener是位于程序集System.Diagnostics.Tracing中的一个类,提供了一组启/禁用方法。我们先来看一下其源代码结构。
```csharp
public abstract class EventListener
{
// 构造函数保护,防止直接实例化
protected EventListener();
// 事件源创建时触发的事件
public event EventHandler
public event EventHandler
// 通过事件源获取其索引
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类,继承自EventListener。
二、创建自定义事件侦听器
```csharp
public class ReportListener : EventListener
{
public ReportListener() { }
// 定义一个字典,存储跟踪配置信息
public Dictionary
public ReportListener(Dictionary
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++)
{
string payloadString = eventData.Payload[i]?.ToString() ?? string.Empty;
Console.WriteLine($"\tName = \"{eventData.PayloadNames[i]}\" Value = \"{payloadString}\"");
}
Console.WriteLine("");
}
}
}
当Cambrian的渲染器将“body”二字激活时,一个鲜活的场景展现在我们面前。古老的遗迹如同时光之窗,让我们穿越到神秘的古代世界。在浓厚的文化积淀下,Cambrian呈现出独特的艺术韵味和神秘的气息。每一块古老的岩石、每一片古老的森林都诉说着这片土地的历史变迁。在这里,时间仿佛凝固在古老的岁月里,让人感受到历史的沉淀与厚重。
穿行在这片神秘的土地上,我们可以看到这里的一切都被赋予了生命与活力。随着岁月的流转,Cambrian的文化遗产不断积累,形成了一个个充满魅力的传说与故事。这些故事仿佛将古老的时光重现,让我们感受到那个时代的风土人情与人们的喜怒哀乐。这些故事像是一道道清泉,滋润着这片土地,使其焕发出勃勃生机。
在这片土地上,自然与人文相得益彰,构成了一幅美丽的画卷。山川湖泊间流淌着大自然的恩赐,绿树成荫、花香四溢。这里的自然景观如诗如画,令人陶醉。与此人们在这片土地上劳作、生活,传承着古老的文化传统,形成了一道道独特的风景线。这些风景线不仅仅是美丽的景观,更是这片土地上人们生活的写照。他们展示着人们的智慧与勇气,以及他们对这片土地的热爱与敬畏。
在这里,我们不仅可以领略到古代文明的独特魅力,更可以感受到一种古老与现代交融的气息。这里既有传统的建筑和文化符号,又有现代科技的渗透与应用。这种交融使Cambrian散发出一种独特的魅力,让人流连忘返。在这里我们不仅领略到了古代文明的辉煌成就也为未来的科技发展留下了无限的想象空间。在这里我们可以感受到时间的流转与历史的沉淀感受到这片土地的生机与活力。
编程语言
- Asp.Net Core轻松学之利用日志监视进行服务遥测详
- sqlserver 高性能分页实现分析
- javascript拖拽应用实例(二)
- jQuery bt气泡实现悬停显示及移开隐藏功能的方法
- asp.net session丢失的解决方法小结
- php图像处理类实例
- jquery Ajax实现Select动态添加数据
- js console.log打印对象时属性缺失的解决方法
- php中使用GD库做验证码
- json实现前后台的相互传值详解
- webpack多页面开发实践
- JSON简介以及用法汇总
- vue引入axios同源跨域问题
- PHP的APC模块实现上传进度条
- 使用命令行工具npm新创建一个vue项目的方法
- 简单实现PHP留言板功能