新聞中心
?譯者 | 李睿

創(chuàng)新互聯(lián)是一家專業(yè)提供通川企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站建設(shè)、HTML5建站、小程序制作等業(yè)務(wù)。10年已為通川眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站制作公司優(yōu)惠進(jìn)行中。
審校 | 孫淑娟
開發(fā)人員可以利用ASP.NET Core 6中的跟蹤偵聽器為其應(yīng)用程序添加性能和調(diào)試工具。
在處理使用ASP.NET Core 6構(gòu)建的應(yīng)用程序時(shí),開發(fā)人員可能經(jīng)常希望使用跟蹤和日志記錄來監(jiān)控應(yīng)用程序的性能并診斷錯(cuò)誤,還可以在生產(chǎn)環(huán)境中使用跟蹤來衡量應(yīng)用程序在運(yùn)行時(shí)的執(zhí)行情況。
本文討論如何在ASP.NET Core 6使用跟蹤偵聽器,研究如何使用跟蹤偵聽器收集跟蹤消息,并使用ILogger將跟蹤輸出定向??到事件日志。
要使用本文中提供的代碼示例,應(yīng)該在系統(tǒng)中安裝Visual Studio 2022。
在Visual Studio 2022中創(chuàng)建ASP.NET Core Web API項(xiàng)目
首先,在Visual Studio 2022中創(chuàng)建一個(gè)ASP.NET Core項(xiàng)目。按照以下步驟將在Visual Studio 2022中創(chuàng)建一個(gè)新的ASP.NET Core 6 Web API項(xiàng)目:
(1)啟動(dòng)Visual Studio 2022 IDE。
(2)點(diǎn)擊“創(chuàng)建新項(xiàng)目”。
(3)在“創(chuàng)建新項(xiàng)目”窗口中,從顯示的模板列表中選擇“ASP.NET Core Web API”。
(4)單擊“下一步”。
(5)在“配置新項(xiàng)目”窗口中,指定新項(xiàng)目的名稱和位置。
(6)根據(jù)偏好,可以選擇選中“將解決方案和項(xiàng)目放在同一目錄中”復(fù)選框。
(7)單擊“下一步”。
(8)在接下來顯示的“附加信息”窗口中,確保選中“使用控制器...”復(fù)選框,因?yàn)樵谶@示例中不會(huì)使用最少的API。將“身份驗(yàn)證類型”保留為“無”(默認(rèn))。
(9)確保未選中“啟用Docker”、“為HTTPS配置”和“啟用開放API支持”復(fù)選框,因?yàn)椴粫?huì)在此處使用任何這些功能。
(10)單擊創(chuàng)建。
在本文中,將使用這個(gè)ASP.NET Core 6 Web API項(xiàng)目來處理跟蹤偵聽器。
什么是跟蹤?
與跟蹤主要事件的事件日志相比,跟蹤允許更完整地查看正在運(yùn)行的應(yīng)用程序及其組件。日志包含結(jié)構(gòu)化或非結(jié)構(gòu)化時(shí)間戳數(shù)據(jù),這些數(shù)據(jù)顯示應(yīng)用程序中發(fā)生的事件的記錄。跟蹤提供了對(duì)單個(gè)請(qǐng)求及其處理方式的更多可見性。
System.Diagnostics命名空間包含跟蹤類和調(diào)試類。跟蹤類用于生產(chǎn)環(huán)境,而調(diào)試類用于開發(fā)時(shí)。
跟蹤通常涉及以下三個(gè)階段:
- 檢測(cè):編寫必要的代碼來捕獲相關(guān)信息。
- 跟蹤:將跟蹤消息寫入指定的目標(biāo),即事件日志、文本文件、數(shù)據(jù)庫(kù)表等。
- 分析:分析從跟蹤中收集的信息以確定應(yīng)用程序中的瓶頸。
什么是跟蹤偵聽器?為什么需要它們?
跟蹤偵聽器收集跟蹤消息、存儲(chǔ)它們,并將它們定向到適當(dāng)?shù)哪繕?biāo),例如文本文件。.NET提供了幾個(gè)跟蹤偵聽器,其中包括:
- ConsoleTraceListener——將跟蹤消息發(fā)送到控制臺(tái)窗口。
- DefaultTraceListener——將跟蹤消息發(fā)送到標(biāo)準(zhǔn)調(diào)試輸出。
- DelimitedListTraceListener——以分隔格式將跟蹤輸出發(fā)送到流、流編寫器或文本編寫器。
- EventLogTraceListener——將跟蹤消息發(fā)送到事件日志。
- TextWriterTraceListener——將跟蹤消息發(fā)送到文本文件。
- XmlWriterTraceListener——將跟蹤消息轉(zhuǎn)換為XML。
System.Diagnostics.Debug和System.Diagnostics.Trace類可以將消息發(fā)送到跟蹤偵聽器,這些偵聽器又將消息路由到適當(dāng)?shù)哪繕?biāo)。
在ASP.NET Core 6中使用配置文件創(chuàng)建跟蹤偵聽器
開發(fā)人員可以使用配置文件或編寫自定義代碼來創(chuàng)建跟蹤偵聽器。下面顯示的代碼片段說明了如何使用應(yīng)用程序配置文件創(chuàng)建跟蹤偵聽器。
type="System.Diagnostics.TextWriterTraceListener"
initializeData="TraceOutput.txt" />
添加到Listeners集合的所有偵聽器都將接收跟蹤輸出。但是,可以使用偵聽器而不將其添加到偵聽器集合中。在這種情況下,使用偵聽器中的Write或WriteLine方法發(fā)送輸出。
以下的代碼演示了一個(gè)偵聽器,該偵聽器未添加到偵聽器集合,但仍能夠?qū)⒏櫹l(fā)送到輸出窗口、文件或任何預(yù)配置的輸出。
TextWriterTraceListener myFirstListener = new
TextWriterTraceListener("Output.txt", "myFirstListener");
myFirstListener.WriteLine("This is a test message.");
myFirstListener.Flush();
在ASP.NET Core 6中創(chuàng)建自定義跟蹤偵聽器
在大多數(shù)情況下,.NET 6附帶的跟蹤偵聽器將滿足要求。但是,如果開發(fā)人員想將跟蹤消息輸出到不同的目的地,可以實(shí)現(xiàn)自己的跟蹤偵聽器。
要構(gòu)建自定義跟蹤偵聽器,應(yīng)該創(chuàng)建一個(gè)擴(kuò)展TraceListener抽象類的類。TraceListener類中有幾個(gè)虛擬和抽象方法。開發(fā)人員至少應(yīng)該實(shí)現(xiàn)Write和WriteLine方法。自定義跟蹤偵聽器如下所示:
public class CustomTraceListener : TraceListener
{
public CustomTraceListener(ILoggerFactory loggerFactory)
{
}
public override void Write(string? message, string? category)
{
}
public override void Write(string? message)
{
}
public override void WriteLine(string? message)
{
}
}
因此,自定義跟蹤偵聽器類必須具有參數(shù)構(gòu)造函數(shù)以及Write和WriteLine方法。
開發(fā)人員還需要一個(gè)表示記錄器的ILogger實(shí)例、一個(gè)創(chuàng)建記錄器的ILoggerFactory和一個(gè)StringBuilder來存儲(chǔ)跟蹤消息,然后再將它們發(fā)送到日志目標(biāo)。
private readonly ILoggerFactory _loggerFactory;
private readonly ILogger _iLogger;
private readonly StringBuilder _stringBuilder = new();
開發(fā)人員可以利用依賴注入在構(gòu)造函數(shù)中注入ILoggerFactory的實(shí)例,然后使用該實(shí)例創(chuàng)建ILogger的實(shí)例。
public CustomTraceListener(ILoggerFactory loggerFactory)
{
_loggerFactory = loggerFactory;
_iLogger = loggerFactory.CreateLogger(nameof(CustomTraceListener));
}
下面是Write和WriteLine方法的最小實(shí)現(xiàn):
public override void Write(string? message, string? category)
{
_stringBuilder.Append(message + "-" + category);
}
public override void Write(string? message)
{
_stringBuilder.Append(message);
}
public override void WriteLine(string? message)
{
_stringBuilder.AppendLine(message);
_iLogger.LogInformation(_stringBuilder.ToString());
_stringBuilder.Clear();
}
ASP.NET Core 6中完整的自定義跟蹤偵聽器示例
以下是自定義跟蹤偵聽器的最小實(shí)現(xiàn)的完整源代碼,以供參考。
using System.Collections.Concurrent;
using System.Diagnostics;
using System.Text;
namespace TraceListenerDemo
{
public class CustomTraceListener : TraceListener
{
private readonly ILoggerFactory _loggerFactory;
private readonly ILogger _iLogger;
private readonly StringBuilder _stringBuilder = new();
public CustomTraceListener(ILoggerFactory loggerFactory)
{
_loggerFactory = loggerFactory;
_iLogger =
loggerFactory.CreateLogger(nameof(CustomTraceListener));
}
public override void Write(string? message, string? category)
{
_stringBuilder.Append(message + "-" + category);
}
public override void Write(string? message)
{
_stringBuilder.Append(message);
}
public override void WriteLine(string? message)
{
_stringBuilder.AppendLine(message);
_iLogger.LogInformation(_stringBuilder.ToString());
_stringBuilder.Clear();
}
}
}
在Program.cs文件中注冊(cè)自定義跟蹤偵聽器
要使用自定義跟蹤偵聽器,應(yīng)該使用以下代碼將其注冊(cè)到Listeners集合。
var loggerFactory = app.Services.GetRequiredService();
Trace.Listeners.Add(new LoggerTraceListener(loggerFactory));
因?yàn)樽远x跟蹤偵聽器已經(jīng)添加到偵聽器集合中,所以它將捕獲運(yùn)行時(shí)生成的所有跟蹤消息,并將輸出發(fā)送到記錄器。它還將發(fā)送在應(yīng)用程序中顯式發(fā)送的任何跟蹤消息(就像在前面的myFirstListener示例中所做的那樣)。
因此,添加到Listeners集合的任何偵聽器都可以捕獲運(yùn)行時(shí)生成的跟蹤以及在應(yīng)用程序中顯式發(fā)送的任何跟蹤消息。但是,如果未將跟蹤偵聽器添加到集合中,則它只能發(fā)送在應(yīng)用程序中顯式發(fā)送的跟蹤消息。它不會(huì)捕獲運(yùn)行時(shí)生成的任何跟蹤消息。
使用自定義跟蹤偵聽器時(shí),必須記住關(guān)閉或刷新跟蹤偵聽器以確保清空輸出緩沖區(qū)??梢岳肧tringBuilderCache類來優(yōu)化使用StringBuilder的代碼(在CustomTraceListener類中)。
原文標(biāo)題:??How to work with trace listeners in ASP.NET Core 6???,作者:Joydip Kanjilal?
本文名稱:如何在ASP.NETCore6中使用跟蹤偵聽器
網(wǎng)頁鏈接:http://fisionsoft.com.cn/article/djhpjhh.html


咨詢
建站咨詢
