如何在ASP.NETCore6中使用跟踪监听器
当使用ASP.NETCore6构建的应用程序时,你可能经常想使用跟踪和记录来监控你的启动启动应用程序的性能和诊断错误。你也可以在生产环境中使用跟踪来衡量你的追踪指标追踪指标找应用程序在运行时的表现。这篇文章讨论了我们如何在ASP.NETCore6中使用追踪。源码源码我们将研究如何使用跟踪监听器来收集跟踪信息,启动启动并使用ILogger将跟踪输出引导到事件日志中。追踪指标追踪指标找
要使用本文提供的源码源码代码示例,你的启动启动系统中应该安装有VisualStudio。如果你还没有副本,追踪指标追踪指标找你可以在这里下载VisualStudio。源码源码
在VisualStudio中创建一个ASP.NETCoreWebAPI项目首先,让我们在VisualStudio中创建一个ASP.NETCore项目。按照这些步骤将在VisualStudio中创建一个新的ASP.NETCore6WebAPI项目。
启动VisualStudioIDE。
点击"创建新项目"。
在"创建新项目"窗口,从显示的模板列表中选择"ASP.NETCoreWebAPI"。
点击"下一步"。
在"配置你的新项目"窗口中,指定新项目的名称和位置。
根据你的喜好,可以选择勾选"将解决方案和项目放在同一目录下"复选框。
点击"下一步"。pb cs软件源码
在接下来显示的"附加信息"窗口中,确保勾选"使用控制器..."的复选框,因为我们在这个例子中不会使用最小的API。将"验证类型"保留为"无"(默认)。
确保"启用Docker"、"为HTTPS配置"和"启用开放API支持"的复选框不被选中,因为我们不会在这里使用任何这些功能。
点击创建。
我们将使用这个ASP.NETCore6WebAPI项目,在本文的后续部分使用跟踪监听器。
什么是跟踪?与追踪主要事件的事件日志相比,追踪可以更全面地了解运行中的应用程序及其组件。日志由结构化或非结构化的时间戳数据组成,显示了你的应用程序中发生的事件的记录。追踪提供了对单个请求以及它如何被处理的更多可见性。
System.Diagnostics命名空间包含Trace和Debug类。跟踪类在生产环境中使用,而调试类在开发时使用。
追踪通常包括以下三个阶段。
工具化。我们编写必要的代码来捕获相关信息
追踪。我们把跟踪信息写到指定的目标,即事件日志、文本文件、数据库表等。
分析。我们分析从跟踪中收集到的busybox android 源码下载信息,以确定应用程序中的瓶颈。
什么是跟踪监听器?为什么需要它们?跟踪监听器收集跟踪信息,存储它们,并将它们引导到一个适当的目标,如文本文件。.NET提供了几种跟踪监听器,包括以下几种。
ConsoleTraceListener-将跟踪信息发送到控制台窗口。
DefaultTraceListener-将跟踪信息发送到标准调试输出。
DelimitedListTraceListener-将跟踪输出以限定的格式发送到流、流作家或文本作家。
EventLogTraceListener-发送跟踪信息到事件日志。
TextWriterTraceListener-发送跟踪信息到一个文本文件。
XmlWriterTraceListener-将跟踪信息转换为XML。
System.Diagnostics.Debug和System.Diagnostics.Trace类可以向跟踪监听器发送消息,而监听器又将消息发送到适当的目标。
在ASP.NETCore6中使用配置文件创建一个跟踪监听器你可以通过使用配置文件或编写自定义代码来创建一个跟踪监听器。下面显示的代码片断说明了如何使用你的应用程序配置文件创建一个跟踪监听器。
<configuration>所有添加到监听器集合中的监听器都会收到跟踪输出。然而,你可以使用一个监听器而不把它添加到监听器集合中。在这种情况下,你在监听器中使用Write或WriteLine方法发送输出。
下面的代码说明了一个监听器,它没有被添加到监听器集合中,但仍然能够将跟踪信息发送到输出窗口、文件或任何预先配置的这么调试dubbo 源码输出。
TextWriterTraceListenermyFirstListener=new在ASP.NETCore6中创建一个自定义跟踪监听器在大多数情况下,.NET6默认附带的跟踪监听器将满足您的要求。然而,如果你想把你的跟踪信息输出到不同的目的地,你可以实现你自己的跟踪监听器。
要建立一个自定义的跟踪监听器,你应该创建一个扩展TraceListener抽象类的类。在TraceListener类中有几个虚拟和抽象的方法。你至少应该实现Write和WriteLine方法。至少,你的自定义跟踪监听器应该看起来像这样。
publicclassCustomTraceListener:TraceListener所以,你的自定义跟踪监听器类必须有一个参数构造器和Write和WriteLine方法。
你还需要一个ILogger实例来代表记录器,一个记录器工厂来创建记录器,以及一个StringBuilder来存储跟踪消息,然后再将它们发送到日志目标。
privatereadonlyILoggerFactory_loggerFactory;你可以利用依赖注入的优势,在构造函数中注入ILoggerFactory的一个实例,然后使用该实例来创建ILogger的一个实例。
publicCustomTraceListener(ILoggerFactoryloggerFactory)这里是Write和WriteLine方法的一个最小实现。
publicoverridevoidWrite(string?message,string?category)ASP.NETCore6中完整的自定义跟踪监听器示例下面是我们对自定义跟踪监听器的最小实现的完整源代码,供您参考。
usingSystem.Collections.Concurrent;在Program.cs文件中注册自定义跟踪监听器要使用自定义跟踪监听器,你应该使用以下代码在监听器集合中注册它。
varloggerFactory=app.Services.GetRequiredService<ILoggerFactory>();因为我们的自定义跟踪监听器已经被添加到监听器集合中,它将捕获所有由运行时产生的哪里有交友源码跟踪消息,并将输出发送到我们的记录器。它还将发送我们在应用程序中明确发送的任何跟踪消息(就像我们在前面的myFirstListener例子中做的那样)。
因此,任何添加到监听器集合的监听器都可以捕获由运行时产生的跟踪信息,以及在应用程序中明确发送的任何跟踪信息。然而,如果一个跟踪监听器没有被添加到集合中,它只能发送应用程序中明确发送的跟踪消息。它不会捕获任何由运行时产生的跟踪消息。
当使用自定义跟踪监听器时,你必须记住关闭或刷新跟踪监听器,以确保输出缓冲区被清空。你可以利用StringBuilderCache类来优化你使用StringBuilder的代码(在CustomTraceListener类)。
新版双紫擒龙战法指标,主图擒龙追踪、三线扭转,幅图动能二号,强势起爆,选股公式
主图擒龙追踪功能精准筛选龙头股,包括启动、主升和趋势龙头票。
三线扭转指标提示,个股位于上方时,操作机会以上涨为主,跌势较小。
幅图动能二号显示买入或持有信号为红色,非红色时,建议清仓。
强势起爆和共振追涨标志,表示股票进入强势阶段。
庄家控盘指标显示紫色,提示注意风险。
操作策略:面对显示“紫紫红黄”的股票,大胆操作。依据动能二号,红色代表买入或持有,**则为卖出或减仓时机,绿蓝则为卖出。
以上内容仅为个人收藏与分享,源码中的信号不构成投资建议,不喜勿喷。
vivo手机z6开启追踪怎么找回
要找回丢失的vivo手机Z6,您需要启动追踪功能。对于运行Funtouch OS 1.0到2.6版本(包含3.0 Lite版)的机型,操作步骤如下:首先,进入i管家,点击手机寻回,然后开启追踪开关。接着,使用vivo账号登录。在此之后,编辑紧急联系人信息,以便在更换SIM卡时接收短信通知。最后,确认所有步骤后,点击完成。
对于运行Funtouch OS 3.0版本的设备,操作略有不同。从云服务入口开始,使用vivo账号登录。接着,找到并点击查找手机功能,然后开启追踪开关。同样地,编辑紧急联系人信息,确保在更换SIM卡时能接收通知。最后,点击完成,完成设置。
在开始追踪之前,建议您先查看设备的Funtouch OS版本。操作步骤如下:进入设置,选择更多设置,点击关于手机,最后查看版本信息以确认是否为vivo ROM。
开启追踪功能后,记得在vivo官方网站上测试一下,确保功能已成功启用。如此一来,即便手机不慎丢失,也能通过追踪功能找到它的位置。
uniapp mp 的runtime位置以及开启调试
在uniapp中,由于底层在setData之前对数据进行了diff处理,这使得在开发过程中,很难准确定位到问题出现的具体位置。为了追踪数据变化并解决问题,我决定修改源码以记录diff操作前后的数据。然而,后来我发现官方实际上提供了一个调试入口。
接下来,我将分享如何在uniapp mp-vue中找到runtime位置以及如何开启调试功能。
在uniapp项目启动时,有一个关键的入口点:`mp-weixin:dev`。如果你直接在该入口进行调试,会发现很难找到预期的代码位置,因为它是以插件的形式注入到`vue-cli-serve`中。不过,通过查看`package.json`中的`mp-weixin:dev`配置,我们发现关键在于`@dcloudio`包中的`vue-cli-plugin-uni`插件。在`bin/commands`目录下,我们可以找到`uni-build`,这个工具正是我们寻找的目标。
深入`uni-build`后,线索似乎断了,但通过VSCode的调试功能,我们追踪到`vue-cli-plugin-uni/index.js`中对`uni-build`的调用。在该文件中,我们发现了可疑的代码片段,其中包含与`mp`相关的信息。
继续跟踪,我们最终到达`lib/mp/index.js`,在这里,我们看到了与小程序构建配置相关的`output`字段。关键在于,`runtime`的信息隐藏在了`common/runtime`目录下,这是在构建过程中的文件。经过编译和压缩后,该文件难以直接进行调试,所以我们需要找到原始文件。
在代码中,我们还发现了一个名为`getProvides`的方法,其中同样包含与`runtime`相关的信息。通过这个方法,我们跟踪到了`uni-mp-weixin/dist/index.js`文件,这是与小程序相关的重要文件。
在`uni-mp-weixin/dist/index.js`中,我们看到与小程序相关的代码,但并没有直接找到`common/runtime`文件。通过分析目录结构和构建流程,我们推断`common/runtime`是一个通用的跨平台runtime,而`mp-weixin/runtime`则是针对小程序的特定runtime。
进一步探索,我们发现`main.js`与`runtime`文件相邻,都在`common`目录下。这让我们猜测`runtime`文件是与`entry`入口文件同时被打包的,可能在构建流程的初期阶段。
在配置文件`config`中,我们注意到每个文件都有单独的入口配置,使用多入口。尽管如此,我们仍然没有找到`common/runtime`文件的位置。在`config.module`中,我们发现对`main`入口有特殊配置。通过追踪配置流程,我们发现关键在于`webpack`配置文件,其中涉及到`@dcloudio/vue-cli-plugin-uni`插件的`configure-webpack.js`文件。在该文件中,我们发现了一个关键的引用路径`'@dcloudio/vue-cli-plugin-uni/packages/mp-vue``,最终指向了`mp.runtime.esm.js`文件,这才是我们一直在寻找的runtime。
为了开启调试功能,官方实际上在`env`文件中留有一个入口,只需要将`VUE_APP_DEBUG = true`设置为环境变量即可查看数据变化。虽然默认是以字符串形式输出,但可以通过修改相关代码来展示json格式的数据,只需确保不包含依赖项即可。
2024-11-20 22:29
2024-11-20 22:26
2024-11-20 21:33
2024-11-20 20:20
2024-11-20 20:04