当前位置: 首页 > 科技观察

如何在ASP.NET Core 6中使用跟踪侦听器_1

时间:2023-03-18 00:10:23 科技观察

如何在ASP.NETCore6中使用跟踪侦听器开发人员可以利用ASP.NETCore6中的跟踪侦听器向其应用程序添加性能和调试工具。在使用ASP.NETCore6构建的应用程序时,开发人员可能经常希望使用跟踪和日志记录来监视应用程序的性能和诊断错误,以及在生产中测量应用程序在运行时的性能。执行。本文讨论如何在ASP.NETCore6中使用跟踪侦听器,检查如何使用跟踪侦听器收集跟踪消息,以及使用ILogger将跟踪输出定向??到事件日志。要使用本文提供的代码示例,系统上应安装VisualStudio2022。在VisualStudio2022中创建一个ASP.NETCoreWebAPI项目首先,在VisualStudio2022中创建一个ASP.NETCore项目。按照以下步骤在VisualStudio2022中创建一个新的ASP.NETCore6WebAPI项目:(1)启动VisualStudio2022IDE。(2)点击“创建新项目”。(3)在“创建新项目”窗口中,从显示的模板列表中选择“ASP.NETCoreWebAPI”。(4)单击“下一步”。(5)在“配置新项目”窗口中,指定新项目的名称和位置。(6)根据喜好,您可以选择勾选“将解决方案和项目放在同一目录中”复选框。(7)单击“下一步”。(8)在接下来出现的“AdditionalInformation”窗口中,确保选中“UseController...”复选框,因为本例中不会使用最小API。将身份验证类型保留为无(默认)。(9)确保“EnableDocker”、“ConfigureforHTTPS”和“EnableOpenAPISupport”复选框未选中,因为您不会在此处使用任何这些功能。(10)点击创建。在本文中,这个ASP.NETCore6WebAPI项目将用于处理跟踪侦听器。什么是跟踪?与跟踪主要事件的事件日志相比,跟踪允许更完整地查看正在运行的应用程序及其组件。日志包含结构化或非结构化时间戳数据,显示应用程序中发生的事件记录。跟踪提供了对单个请求及其处理方式的更多可见性。System.Diagnostics命名空间包含跟踪和调试类。跟踪类用于生产环境,而调试类用于开发。跟踪通常涉及以下三个阶段:检测:编写必要的代码以捕获相关信息。Trace:将跟踪消息写入指定的目标,即事件日志、文本文件、数据库表等。Analysis:分析从跟踪中收集的信息以识别应用程序中的瓶颈。什么是跟踪侦听器?为什么需要它们?跟踪侦听器收集跟踪消息、存储它们并将它们定向到适当的目的地,例如文本文件。.NET提供了几个跟踪侦听器,包括:ConsoleTraceListener-将跟踪消息发送到控制台窗口。DefaultTraceListener-将跟踪消息发送到标准调试输出。DelimitedListTraceListener-将跟踪输出以分隔格式发送到流、流编写器或文本编写器。EventLogTraceListener-将跟踪消息发送到事件日志。TextWriterTraceListener-将跟踪消息发送到文本文件。XmlWriterTraceListener-将跟踪消息转换为XML。System.Diagnostics.Debug和System.Diagnostics.Trace类可以将消息发送到跟踪侦听器,跟踪侦听器又将消息路由到适当的目的地。在ASP.NETCore6中使用配置文件创建跟踪侦听器开发人员可以使用配置文件或编写自定义代码来创建跟踪侦听器。下面显示的代码片段说明了如何使用应用程序配置文件创建跟踪侦听器。<配置>添加到Listeners集合的所有侦听器都将接收跟踪输出。但是,可以在不将侦听器添加到侦听器集合的情况下使用它。在这种情况下,使用侦听器中的Write或WriteLine方法发送输出。下面的代码演示了一个没有添加到侦听器集合中的侦听器,但它仍然能够将跟踪消息发送到输出窗口、文件或任何预配置的输出。TextWriterTraceListenermyFirstListener=newTextWriterTraceListener("Output.txt","myFirstListener");myFirstListener.WriteLine("这是一条测试消息。");myFirstListener.Flush();在ASP.NETCore6中创建自定义跟踪侦听器在大多数情况下,.NET6中包含的跟踪侦听器就足够了。但是,如果开发人员想要将跟踪消息输出到不同的目的地,则可以实现他们自己的跟踪侦听器。要构建自定义跟踪侦听器,您应该创建一个扩展TraceListener抽象类的类。TraceListener类中有几个虚方法和抽象方法。开发人员至少应实现Write和WriteLine方法。自定义跟踪侦听器如下所示:publicclassCustomTraceListener:TraceListener{publicCustomTraceListener(ILoggerFactoryloggerFactory){}publicoverridevoidWrite(string?voidWriteLine(string?message){}}因此,自定义跟踪侦听器类必须具有参数构造函数以及Write和WriteLine方法。开发人员还需要一个ILogger实例来表示记录器,一个ILoggerFactory来创建记录器,以及一个StringBuilder来存储跟踪消息,然后再将它们发送到日志目的地。privatereadonlyILoggerFactory_loggerFactory;privatereadonlyILogger_iLogger;privatereadonlyStringBuilder_stringBuilder=new();开发者可以使用依赖注入在构造函数中注入一个ILoggerFactory实例,然后使用这个实例创建一个ILogger实例。publicCustomTraceListener(ILoggerFactoryloggerFactory){_loggerFactory=loggerFactory;_iLogger=loggerFactory.CreateLogger(nameof(CustomTraceListener));}下面是Write和WriteLine方法的最小实现:;}publicoverridevoidWrite(string?message){_stringBuilder.Append(message);}publicoverridevoidWriteLine(string?message){_stringBuilder.AppendLine(message);(_stringBuilder.ToString());_stringBuilder.Clear();}ASP.NETCore6中完整的自定义跟踪侦听器示例以下是自定义跟踪侦听器的最小实现的完整源代码,供参考。使用System.Collections.Concurrent;使用System.Diagnostics;使用System.Text;命名空间TraceListenerDemo{publicclassCustomTraceListener:TraceListener{privatereadonlyILoggerFactory_loggerFactory;私人只读ILogger_iLogger;私有只读StringBuilder_stringBuilder=new();publicCustomTraceListener(ILoggerFactoryloggerFactory){_loggerFactory=loggerFactory;_iLogger=loggerFactory.CreateLogger(nameof(CustomTraceListener));}publicoverridevoidWrite(string?message,string?category){_stringBuilder.Append(message+"-"+category);}publicoverridevoidWrite(string?message){_stringBuilder.追加(消息);}publicoverridevoidWriteLine(string?message){_stringBuilder.附加行(消息);_iLogger。LogInformation(_stringBuilder.ToString());_stringBuilder。清除();在Program.cs文件中注册自定义跟踪侦听器要使用自定义跟踪侦听器,应使用以下代码将其注册到Listeners集合。varloggerFactory=app.Services.GetRequiredService();Trace.Listeners.Add(newLoggerTraceListener(loggerFactory));由于自定义跟踪侦听器已添加到侦听器集合中,它将捕获运行时构建的所有跟踪消息,并将输出发送到记录器。它还将发送在应用程序中显式发送的任何跟踪消息(就像在前面的myFirstListener示例中所做的那样)。因此,添加到Listeners集合的任何侦听器都可以捕获运行时生成的跟踪以及在应用程序内显式发送的任何跟踪消息。但是,如果没有向集合添加跟踪侦听器,则它只能发送在应用程序中显式发送的跟踪消息。它不捕获运行时生成的任何跟踪消息。使用自定义跟踪侦听器时,必须记住关闭或刷新跟踪侦听器以确保清空输出缓冲区。使用StringBuilder的代码(在CustomTraceListener类中)可以使用StringBuilderCache类进行优化。原标题:HowtoworkwithtracelistenersinASP.NETCore6,作者:JoydipKanjilal