Události
Vezměte si výzvu Microsoft Learn
19. 11. 23 - 10. 1. 23
Ignite Edition – Budování dovedností v Microsoft Azure a získání digitálního odznáček do 10. ledna!
ZaregistrovatTento prohlížeč se už nepodporuje.
Upgradujte na Microsoft Edge, abyste mohli využívat nejnovější funkce, aktualizace zabezpečení a technickou podporu.
Sada Azure SDK pro . Klientské knihovny NET zahrnují možnost protokolování operací klientské knihovny. Toto protokolování umožňuje monitorovat vstupně-výstupní požadavky a odpovědi, které klientské knihovny provádějí ve službách Azure. Protokoly se obvykle používají k ladění nebo diagnostice problémů s komunikací. Tento článek popisuje následující přístupy k povolení protokolování pomocí sady Azure SDK pro .NET:
Důležité
Tento článek se týká klientských knihoven, které používají nejnovější verze sady Azure SDK pro .NET. Pokud chcete zjistit, jestli je knihovna podporovaná, podívejte se na seznam nejnovějších verzí sady Azure SDK. Pokud vaše aplikace používá starší verzi klientské knihovny Azure SDK, projděte si konkrétní pokyny v příslušné dokumentaci ke službě.
Sada SDK protokoluje každý požadavek HTTP a odpověď, sanitizaci hodnot dotazu na parametr a hlavičky pro odebrání osobních údajů.
Položka protokolu požadavku HTTP:
Položka protokolu odpovědi HTTP:
Obsah požadavku HTTP a odpovědi:
Datový proud obsahu jako text nebo bajty v závislosti na Content-Type
záhlaví
Poznámka
Protokolování obsahu je ve výchozím nastavení zakázané. Pokud ho chcete povolit, přečtěte si téma Protokol http požadavků a odpovědí. Tato funkce se vztahuje pouze na knihovny využívající protokol HTTP ke komunikaci se službou Azure. Knihovny založené na alternativních protokolech, jako je AMQP, nepodporují protokolování obsahu. Mezi nepodporované příklady patří knihovny pro služby Azure, jako jsou Event Hubs, Service Bus a Web PubSub.
Protokoly událostí jsou obvykle výstupem na jedné z těchto tří úrovní:
Sada Azure SDK pro . Klientské knihovny NET protokoluje události trasování událostí pro Windows (ETW) prostřednictvím System.Diagnostics.Tracing.EventSource třídy, která je typická pro .NET. Zdroje událostí umožňují používat strukturované protokolování v aplikaci s minimální režií na výkon. Pokud chcete získat přístup k protokolům událostí, musíte zaregistrovat naslouchací procesy událostí.
Sada SDK obsahuje Azure.Core.Diagnostics.AzureEventSourceListener třídu, která obsahuje dvě statické metody, které zjednodušují komplexní protokolování pro vaši aplikaci .NET: CreateConsoleLogger
a CreateTraceLogger
. Každá z těchto metod přijímá volitelný parametr, který určuje úroveň protokolu. Pokud parametr není zadaný, použije se výchozí úroveň Informational
protokolu.
Klíčovou sadou tenantů sady Azure SDK pro klientské knihovny .NET je zjednodušení možnosti zobrazení komplexních protokolů v reálném čase. Metoda CreateConsoleLogger
umožňuje odesílat protokoly do okna konzoly s jedním řádkem kódu:
using AzureEventSourceListener listener =
AzureEventSourceListener.CreateConsoleLogger();
Pokud implementujete naslouchací procesy trasování, můžete metodu CreateTraceLogger
použít k protokolování do standardního mechanismu trasování událostí .NET (System.Diagnostics.Tracing). Další informace o trasování událostí v .NET naleznete v tématu Naslouchací procesy trasování.
Tento příklad určuje úroveň podrobného protokolu:
using AzureEventSourceListener listener =
AzureEventSourceListener.CreateTraceLogger(EventLevel.Verbose);
Jak je uvedeno výše, musíte zaregistrovat naslouchací procesy událostí pro příjem zpráv protokolu ze sady Azure SDK pro .NET. Pokud nechcete implementovat komplexní protokolování pomocí jedné z výše uvedených zjednodušených metod, můžete vytvořit instanci AzureEventSourceListener
třídy. Tuto instanci předejte metodu zpětného volání, kterou napíšete. Tato metoda obdrží zprávy protokolu, které můžete zpracovat, ale potřebujete. Kromě toho při vytváření instance můžete zadat úrovně protokolu, které se mají zahrnout.
Následující příklad vytvoří naslouchací proces události, který se přihlásí do konzoly s vlastní zprávou. Protokoly se filtrují na tyto události generované z klientské knihovny Azure Core s úrovní podrobného. Knihovna Azure Core používá název Azure-Core
zdroje událostí .
using Azure.Core.Diagnostics;
using System.Diagnostics.Tracing;
// code omitted for brevity
using var listener = new AzureEventSourceListener((e, message) =>
{
// Only log messages from "Azure-Core" event source
if (e.EventSource.Name == "Azure-Core")
{
Console.WriteLine($"{DateTime.Now} {message}");
}
},
level: EventLevel.Verbose);
Služba AzureEventSourceLogForwarder umožňuje pro protokolování použít standardní konfiguraci protokolování ASP.NET Core. Služba předává zprávy protokolu ze zdrojů událostí Sady Azure SDK do ILoggerFactory.
Následující tabulka znázorňuje, jak se sada Azure SDK pro .NET EventLevel
mapuje na ASP.NET Core LogLevel
.
Azure SDK EventLevel |
ASP.NET Core LogLevel |
---|---|
Critical |
Critical |
Error |
Error |
Informational |
Information |
Warning |
Warning |
Verbose |
Debug |
LogAlways |
Information |
Jako příklad použijte knihovnu Azure Service Bus a proveďte následující kroky:
Nainstalujte balíček Microsoft.Extensions.Azure NuGet:
dotnet add package Microsoft.Extensions.Azure
V Program.cs zaregistrujte klienta knihovny Azure SDK prostřednictvím volání AddAzureClients metody rozšíření:
using Azure.Identity;
using Microsoft.Extensions.Azure;
// code omitted for brevity
builder.Services.AddAzureClients(azureBuilder =>
{
azureBuilder.AddServiceBusClient(
builder.Configuration.GetConnectionString("ServiceBus"));
azureBuilder.UseCredential(new DefaultAzureCredential());
});
V předchozím vzorku AddAzureClients
metoda:
V appsettings.json změňte výchozí úroveň protokolu knihovny služby Service Bus. Můžete ho Logging:LogLevel:Azure.Messaging.ServiceBus
například přepnout Debug
tak, že nastavíte klíč takto:
{
"ConnectionStrings": {
"ServiceBus": "<connection_string>"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning",
"Azure.Messaging.ServiceBus": "Debug"
}
},
"AllowedHosts": "*"
}
Vzhledem k tomu, že Logging:LogLevel:Azure.Messaging.ServiceBus
klíč je nastavený na Debug
, budou protokolovány události klienta služby Service Bus až do EventLevel.Verbose
protokolu.
Existují scénáře, kdy registrace klienta knihovny Azure SDK v kontejneru DI není možná nebo není nutná:
IServiceCollection
rozšíření pro registraci klienta v kontejneru DI.V těchto scénářích proveďte následující kroky:
Nainstalujte balíček Microsoft.Extensions.Azure NuGet:
dotnet add package Microsoft.Extensions.Azure
V Program.cs zaregistrujte službu předávání protokolů jako jednoúčelovou službu v kontejneru DI:
using Azure.Identity;
using Microsoft.AspNetCore.DataProtection;
using Microsoft.Extensions.Azure;
using Microsoft.Extensions.DependencyInjection.Extensions;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.TryAddSingleton<AzureEventSourceLogForwarder>();
builder.Services.AddDataProtection()
.PersistKeysToAzureBlobStorage("<connection_string>", "<container_name>", "keys.xml")
.ProtectKeysWithAzureKeyVault(new Uri("<uri>"), new DefaultAzureCredential());
Načtěte službu předávání protokolů z kontejneru DI a vyvoláte její Start metodu. Například použití injektáže konstruktoru ve třídě modelu stránky ASP.NET Core Razor Pages:
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.Azure;
public class IndexModel : PageModel
{
public IndexModel(AzureEventSourceLogForwarder logForwarder) =>
logForwarder.Start();
V appsettings.json změňte výchozí úroveň protokolu knihovny Azure Core. Můžete ho Logging:LogLevel:Azure.Core
například přepnout Debug
tak, že nastavíte klíč takto:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning",
"Azure.Core": "Debug"
}
},
"AllowedHosts": "*"
}
Vzhledem k tomu, že Logging:LogLevel:Azure.Core
klíč je nastavený na Debug
, protokolují se události knihovny Azure Core až do EventLevel.Verbose
protokolu.
Další informace najdete v článku o protokolování v .NET Core a ASP.NET Core.
Distribuce OpenTelemetry služby Azure Monitor počínaje verzí 1.2.0
podporuje zachytávání protokolů pocházejících z klientských knihoven Azure. Protokolování můžete řídit pomocí některé z možností konfigurace, které jsou popsány v protokolování v .NET Core a ASP.NET Core.
Jako příklad použijte knihovnu Azure Service Bus a proveďte následující kroky:
Nainstalujte balíček NuGet Azure.Monitor.OpenTelemetry.AspNetCore:
dotnet add package Azure.Monitor.OpenTelemetry.AspNetCore
Vytvořte nebo zaregistrujte klienta knihovny. Distribuce podporuje oba případy.
await using var client = new ServiceBusClient("<connection_string>");
V appsettings.json změňte výchozí úroveň protokolu knihovny služby Service Bus. Můžete ho Logging:LogLevel:Azure.Messaging.ServiceBus
například přepnout Debug
tak, že nastavíte klíč takto:
{
"ConnectionStrings": {
"ServiceBus": "<connection_string>"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning",
"Azure.Messaging.ServiceBus": "Debug"
}
},
"AllowedHosts": "*"
}
Vzhledem k tomu, že Logging:LogLevel:Azure.Messaging.ServiceBus
klíč je nastavený na Debug
, budou protokolovány události klienta služby Service Bus až do EventLevel.Verbose
protokolu.
Poznámka
Tato funkce se vztahuje pouze na knihovny využívající protokol HTTP ke komunikaci se službou Azure. Knihovny založené na alternativních protokolech, jako je AMQP, nepodporují protokolování obsahu. Mezi nepodporované příklady patří knihovny pro služby Azure, jako jsou Event Hubs, Service Bus a Web PubSub.
Při řešení potíží s neočekávaným chováním klientské knihovny je užitečné zkontrolovat následující položky:
Ve výchozím nastavení je protokolování výše uvedeného obsahu zakázané. Pokud chcete povolit protokolování těla požadavků HTTP a odpovědí, proveďte následující kroky:
Nastavte vlastnost objektu IsLoggingContentEnabled možností klienta na true
hodnotu a předejte objekt možnosti konstruktoru klienta. Pokud například chcete protokolovat požadavky HTTP a odpovědi pro knihovnu tajných kódů služby Azure Key Vault:
var clientOptions = new SecretClientOptions
{
Diagnostics =
{
IsLoggingContentEnabled = true,
}
};
var client = new SecretClient(
new Uri("https://<keyvaultname>.vault.azure.net/"),
new DefaultAzureCredential(),
clientOptions);
Použijte preferovaný přístup k protokolování s úrovní událostí nebo protokolu podrobného nebo ladění nebo vyšší. Konkrétní pokyny najdete v následující tabulce.
Přístup | Pokyny |
---|---|
Povolení protokolování pomocí předdefinovaných metod | Předání EventLevel.Verbose nebo předání nebo EventLevel.LogAlways předání AzureEventSourceListener.CreateConsoleLogger AzureEventSourceListener.CreateTraceLogger |
Konfigurace vlastního protokolování | Nastavení parametru konstruktoru AzureEventSourceListener třídy level na EventLevel.Verbose nebo EventLevel.LogAlways |
Mapování na protokolování jádra ASP.NET | Přidat "Azure.Core": "Debug" do appsettings.json |
Zpětná vazba k produktu .NET
.NET je open source projekt. Vyberte odkaz pro poskytnutí zpětné vazby:
Události
Vezměte si výzvu Microsoft Learn
19. 11. 23 - 10. 1. 23
Ignite Edition – Budování dovedností v Microsoft Azure a získání digitálního odznáček do 10. ledna!
ZaregistrovatŠkolení
Modul
Záznam protokolů webových aplikací pomocí protokolování diagnostiky App Service - Training
Zjistěte, jak můžete zaznamenat výstup trasování z webových aplikací Azure. Prohlédněte si stream dynamického protokolu a stáhněte si soubory protokolu pro offline analýzu.