成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何在ASP.NET Core 6中使用跟蹤偵聽器

譯文 精選
開發 開發工具
本文討論如何在ASP.NET Core 6使用跟蹤偵聽器,研究如何使用跟蹤偵聽器收集跟蹤消息,并使用ILogger將跟蹤輸出定向??到事件日志。

?譯者 | 李睿

審校 | 孫淑娟

開發人員可以利用ASP.NET Core 6中的跟蹤偵聽器為其應用程序添加性能和調試工具。  

在處理使用ASP.NET Core 6構建的應用程序時,開發人員可能經常希望使用跟蹤和日志記錄來監控應用程序的性能并診斷錯誤,還可以在生產環境中使用跟蹤來衡量應用程序在運行時的執行情況。  

本文討論如何在ASP.NET Core 6使用跟蹤偵聽器,研究如何使用跟蹤偵聽器收集跟蹤消息,并使用ILogger將跟蹤輸出定向??到事件日志。  

要使用本文中提供的代碼示例,應該在系統中安裝Visual Studio 2022。

在Visual Studio 2022中創建ASP.NET Core Web API項目  

首先,在Visual Studio 2022中創建一個ASP.NET Core項目。按照以下步驟將在Visual Studio 2022中創建一個新的ASP.NET Core 6 Web API項目:  

(1)啟動Visual Studio 2022 IDE。  

(2)點擊“創建新項目”。  

(3)在“創建新項目”窗口中,從顯示的模板列表中選擇“ASP.NET Core Web API”。  

(4)單擊“下一步”。  

(5)在“配置新項目”窗口中,指定新項目的名稱和位置。  

(6)根據偏好,可以選擇選中“將解決方案和項目放在同一目錄中”復選框。  

(7)單擊“下一步”。  

(8)在接下來顯示的“附加信息”窗口中,確保選中“使用控制器...”復選框,因為在這示例中不會使用最少的API。將“身份驗證類型”保留為“無”(默認)。  

(9)確保未選中“啟用Docker”、“為HTTPS配置”和“啟用開放API支持”復選框,因為不會在此處使用任何這些功能。  

(10)單擊創建。  

在本文中,將使用這個ASP.NET Core 6 Web API項目來處理跟蹤偵聽器。  

什么是跟蹤?

與跟蹤主要事件的事件日志相比,跟蹤允許更完整地查看正在運行的應用程序及其組件。日志包含結構化或非結構化時間戳數據,這些數據顯示應用程序中發生的事件的記錄。跟蹤提供了對單個請求及其處理方式的更多可見性。  

System.Diagnostics命名空間包含跟蹤類和調試類。跟蹤類用于生產環境,而調試類用于開發時。

跟蹤通常涉及以下三個階段:  

  • 檢測:編寫必要的代碼來捕獲相關信息。  
  • 跟蹤:將跟蹤消息寫入指定的目標,即事件日志、文本文件、數據庫表等。  
  • 分析:分析從跟蹤中收集的信息以確定應用程序中的瓶頸。  

什么是跟蹤偵聽器?為什么需要它們?  

跟蹤偵聽器收集跟蹤消息、存儲它們,并將它們定向到適當的目標,例如文本文件。.NET提供了幾個跟蹤偵聽器,其中包括:  

  • ConsoleTraceListener——將跟蹤消息發送到控制臺窗口。  
  • DefaultTraceListener——將跟蹤消息發送到標準調試輸出。  
  • DelimitedListTraceListener——以分隔格式將跟蹤輸出發送到流、流編寫器或文本編寫器。  
  • EventLogTraceListener——將跟蹤消息發送到事件日志。  
  • TextWriterTraceListener——將跟蹤消息發送到文本文件。  
  • XmlWriterTraceListener——將跟蹤消息轉換為XML。  

System.Diagnostics.Debug和System.Diagnostics.Trace類可以將消息發送到跟蹤偵聽器,這些偵聽器又將消息路由到適當的目標。

在ASP.NET Core 6中使用配置文件創建跟蹤偵聽器  

開發人員可以使用配置文件或編寫自定義代碼來創建跟蹤偵聽器。下面顯示的代碼片段說明了如何使用應用程序配置文件創建跟蹤偵聽器。  

<configuration>
  <system.diagnostics>
    <trace autoflush="false" indentsize="4">
      <listeners>
        <add name="MyFirstListener"
        type="System.Diagnostics.TextWriterTraceListener"
        initializeData="TraceOutput.txt" />
        <remove name="Default" />
      </listeners>
    </trace>
  </system.diagnostics>
</configuration>

添加到Listeners集合的所有偵聽器都將接收跟蹤輸出。但是,可以使用偵聽器而不將其添加到偵聽器集合中。在這種情況下,使用偵聽器中的Write或WriteLine方法發送輸出。  

以下的代碼演示了一個偵聽器,該偵聽器未添加到偵聽器集合,但仍能夠將跟蹤消息發送到輸出窗口、文件或任何預配置的輸出。

TextWriterTraceListener myFirstListener = new
TextWriterTraceListener("Output.txt", "myFirstListener");
myFirstListener.WriteLine("This is a test message.");
myFirstListener.Flush();

在ASP.NET Core 6中創建自定義跟蹤偵聽器  

在大多數情況下,.NET 6附帶的跟蹤偵聽器將滿足要求。但是,如果開發人員想將跟蹤消息輸出到不同的目的地,可以實現自己的跟蹤偵聽器。  

要構建自定義跟蹤偵聽器,應該創建一個擴展TraceListener抽象類的類。TraceListener類中有幾個虛擬和抽象方法。開發人員至少應該實現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)
    {           
    }
}

因此,自定義跟蹤偵聽器類必須具有參數構造函數以及Write和WriteLine方法。  

開發人員還需要一個表示記錄器的ILogger實例、一個創建記錄器的ILoggerFactory和一個StringBuilder來存儲跟蹤消息,然后再將它們發送到日志目標。

private readonly ILoggerFactory _loggerFactory;
private readonly ILogger _iLogger;
private readonly StringBuilder _stringBuilder = new();

開發人員可以利用依賴注入在構造函數中注入ILoggerFactory的實例,然后使用該實例創建ILogger的實例。

public CustomTraceListener(ILoggerFactory loggerFactory)
{
   _loggerFactory = loggerFactory;
   _iLogger = loggerFactory.CreateLogger(nameof(CustomTraceListener));
}

下面是Write和WriteLine方法的最小實現:  

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中完整的自定義跟蹤偵聽器示例  

以下是自定義跟蹤偵聽器的最小實現的完整源代碼,以供參考。  

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文件中注冊自定義跟蹤偵聽器  

要使用自定義跟蹤偵聽器,應該使用以下代碼將其注冊到Listeners集合。  

var loggerFactory = app.Services.GetRequiredService<ILoggerFactory>();
Trace.Listeners.Add(new LoggerTraceListener(loggerFactory));

因為自定義跟蹤偵聽器已經添加到偵聽器集合中,所以它將捕獲運行時生成的所有跟蹤消息,并將輸出發送到記錄器。它還將發送在應用程序中顯式發送的任何跟蹤消息(就像在前面的myFirstListener示例中所做的那樣)。  

因此,添加到Listeners集合的任何偵聽器都可以捕獲運行時生成的跟蹤以及在應用程序中顯式發送的任何跟蹤消息。但是,如果未將跟蹤偵聽器添加到集合中,則它只能發送在應用程序中顯式發送的跟蹤消息。它不會捕獲運行時生成的任何跟蹤消息。  

使用自定義跟蹤偵聽器時,必須記住關閉或刷新跟蹤偵聽器以確保清空輸出緩沖區。可以利用StringBuilderCache類來優化使用StringBuilder的代碼(在CustomTraceListener類中)。

原文標題:??How to work with trace listeners in ASP.NET Core 6???,作者:Joydip Kanjilal?

責任編輯:華軒 來源: 51CTO
相關推薦

2021-03-10 09:40:43

LamarASP容器

2021-02-03 13:35:25

ASPweb程序

2021-02-28 20:56:37

NCache緩存框架

2021-01-07 07:39:07

工具接口 Swagger

2021-03-03 22:37:16

MediatR中介者模式

2021-01-28 22:39:35

LoggerMessa開源框架

2021-01-31 22:56:50

FromServiceASP

2021-03-17 09:45:31

LazyCacheWindows

2021-02-06 21:40:13

SignalR通訊TypeScript

2021-02-02 16:19:08

Serilog日志框架

2021-02-07 17:29:04

監視文件接口

2021-01-26 14:57:00

中間件應用模塊化

2021-04-12 07:03:10

輕量級模塊化框架

2021-01-04 05:44:54

框架日志

2021-06-22 16:59:56

微軟.NETC# 軟件開發

2017-10-20 08:52:11

內存緩存并發模式Linux

2009-02-05 14:02:46

SmtpMail發送郵件ASP.NET

2021-04-14 07:35:12

Json格式化日期

2021-01-15 05:38:28

ASPHttp端口

2021-01-13 07:33:41

API數據安全
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 作爱视频免费看 | 成人久久久 | 亚洲福利网站 | 男女羞羞视频在线免费观看 | 久草网免费 | 国产欧美二区 | 91玖玖| aaa一区 | 欧美成人一级视频 | 欧美国产视频一区二区 | 久久久久久久一区二区三区 | 综合久| 国产在线观看一区二区三区 | 日韩精品一| 91玖玖| 久久国产精品一区二区三区 | 99热在线免费 | 国产999精品久久久 日本视频一区二区三区 | 国产美女免费视频 | 亚洲av一级毛片 | 国产成人jvid在线播放 | 天天躁日日躁狠狠躁白人 | 日韩三区在线观看 | 免费黄色特级片 | 伊人啪啪网| 精品成人佐山爱一区二区 | 在线免费观看a级片 | 亚洲精品无人区 | 一区二区三区回区在观看免费视频 | 91视频在线看 | 在线久草 | 国产区久久 | 免费h在线 | 日本一区二区三区在线观看 | 国产男女精品 | 久久久精彩视频 | 亚洲va欧美va天堂v国产综合 | 国产精品亚洲精品 | 99这里只有精品 | 国产日韩91| 久久久免费少妇高潮毛片 |