için Azure SDK'sı. NET'in istemci kitaplıkları, istemci kitaplığı işlemlerini günlüğe kaydetme özelliğini içerir. Bu günlük, istemci kitaplıklarının Azure hizmetlerine yaptığı G/Ç isteklerini ve yanıtlarını izlemenizi sağlar. Günlükler genellikle iletişim sorunlarının hatalarını ayıklamak veya tanılamak için kullanılır. Bu makalede, .NET için Azure SDK ile günlüğe kaydetmeyi etkinleştirmek için aşağıdaki yaklaşımlar açıklanmaktadır:
Bu makale, .NET için Azure SDK'nın en son sürümlerini kullanan istemci kitaplıkları için geçerlidir. Bir kitaplığın desteklenip desteklenmediğini görmek için Azure SDK'nın en son sürümleri listesine bakın. Uygulamanız Azure SDK istemci kitaplığının eski bir sürümünü kullanıyorsa, ilgili hizmet belgelerindeki belirli yönergelere bakın.
Günlük bilgileri
SDK, kişisel verileri kaldırmak için parametre sorgusu ve üst bilgi değerlerini temizleyerek her HTTP isteğini ve yanıtını günlüğe kaydeder.
HTTP istek günlüğü girişi:
Benzersiz Kimlik
HTTP yöntemi
URI
Giden istek üst bilgileri
HTTP yanıt günlüğü girdisi:
G/Ç işleminin süresi (geçen süre)
Request ID
HTTP durum kodu
HTTP neden tümceciği
Yanıt üst bilgileri
Uygun olduğunda hata bilgileri
HTTP isteği ve yanıt içeriği:
üst bilgiye bağlı Content-Type olarak metin veya bayt olarak içerik akışı.
Not
İçerik günlüğü varsayılan olarak devre dışıdır. Etkinleştirmek için bkz . HTTP isteğini ve yanıt gövdelerini günlüğe kaydetme. Bu özellik yalnızca BIR Azure hizmetiyle iletişim kurmak için HTTP kullanan kitaplıklar için geçerlidir. AMQP gibi alternatif protokollere dayalı kitaplıklar içerik günlüğünü desteklemez. Desteklenmeyen örnekler arasında Event Hubs, Service Bus ve Web PubSub gibi Azure hizmetlerine yönelik kitaplıklar yer alır.
Olay günlükleri genellikle şu üç düzeyden birinde çıkış olur:
İstek ve yanıt olayları için bilgilendirme
Hatalar için uyarı
Ayrıntılı iletiler ve içerik günlüğü için ayrıntılı bilgi
Yerleşik yöntemlerle günlüğe kaydetmeyi etkinleştirme
için Azure SDK'sı. NET'in istemci kitaplıkları olayları .NET için tipik olan sınıfı aracılığıyla System.Diagnostics.Tracing.EventSource Windows için Olay İzleme'ye (ETW) kaydeder. Olay kaynakları, uygulamanızda en düşük performans yüküyle yapılandırılmış günlükleri kullanmanıza olanak sağlar. Olay günlüklerine erişmek için olay dinleyicilerini kaydetmeniz gerekir.
SDK, .NET uygulamanız için kapsamlı günlüğe kaydetmeyi Azure.Core.Diagnostics.AzureEventSourceListener basitleştiren iki statik yöntem içeren sınıfını içerir: CreateConsoleLogger ve CreateTraceLogger. Bu yöntemlerin her biri, günlük düzeyini belirten isteğe bağlı bir parametre kabul eder. Parametresi sağlanmadıysa varsayılan günlük düzeyi Informational kullanılır.
Konsol penceresinde oturum açın
.NET istemci kitaplıkları için Azure SDK'nın temel ağlarından biri, kapsamlı günlükleri gerçek zamanlı olarak görüntüleme özelliğini basitleştirmektir. yöntemi, CreateConsoleLogger günlükleri konsol penceresine tek bir kod satırıyla göndermenizi sağlar:
C#
using AzureEventSourceListener listener =
AzureEventSourceListener.CreateConsoleLogger();
Tanılama izlemelerine günlüğe kaydetme
İzleme dinleyicileri uygularsanız, yöntemini kullanarak CreateTraceLogger standart .NET olay izleme mekanizmasına (System.Diagnostics.Tracing ) oturum açabilirsiniz. .NET'te olay izleme hakkında daha fazla bilgi için bkz . İzleme Dinleyicileri.
Bu örnek, ayrıntılı günlük düzeyini belirtir:
C#
using AzureEventSourceListener listener =
AzureEventSourceListener.CreateTraceLogger(EventLevel.Verbose);
Özel günlüğü yapılandırma
Yukarıda belirtildiği gibi, .NET için Azure SDK'dan günlük iletileri almak için olay dinleyicilerini kaydetmeniz gerekir. Yukarıdaki basitleştirilmiş yöntemlerden birini kullanarak kapsamlı günlük kaydı uygulamak istemiyorsanız sınıfının bir örneğini AzureEventSourceListener oluşturabilirsiniz. Bu örneği yazdığınız bir geri çağırma yöntemi geçirin. Bu yöntem, işlemeniz gereken günlük iletilerini alır. Ayrıca, örneği oluştururken, eklenecek günlük düzeylerini belirtebilirsiniz.
Aşağıdaki örnek, konsolda özel bir iletiyle oturum açan bir olay dinleyicisi oluşturur. Günlükler, Azure Core istemci kitaplığından yayılan olaylara göre bir ayrıntı düzeyiyle filtrelenir. Azure Core kitaplığı olay kaynağı adını Azure-Corekullanır.
C#
using Azure.Core.Diagnostics;
using System.Diagnostics.Tracing;
// code omitted for brevityusingvar listener = new AzureEventSourceListener((e, message) =>
{
// Only log messages from "Azure-Core" event sourceif (string.Equals(e.EventSource.Name, "Azure-Core", StringComparison.Ordinal))
{
Console.WriteLine($"{DateTime.Now}{message}");
}
},
level: EventLevel.Verbose);
ASP.NET Core günlüğüne eşleme
Hizmet, AzureEventSourceLogForwarder günlük kaydı için standart ASP.NET Core günlük yapılandırmasını kullanmanızı sağlar. Hizmet, Azure SDK olay kaynaklarından günlük iletilerini adresine ILoggerFactoryiletir.
Aşağıdaki tabloda .NET EventLevel için Azure SDK'sının ASP.NET Core LogLevelile nasıl eşildiği açıklanmaktadır.
Azure SDK EventLevel
ASP.NET Core LogLevel
Critical
Critical
Error
Error
Informational
Information
Warning
Warning
Verbose
Debug
LogAlways
Information
İstemci kaydıyla günlüğe kaydetme
Örnek olarak Azure Service Bus kitaplığını kullanarak aşağıdaki adımları tamamlayın:
Program.cs'da, uzantı yöntemine bir çağrı yoluyla Azure SDK kitaplığının istemcisini AddAzureClients kaydedin:
C#
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());
});
Yukarıdaki örnekte AddAzureClients yöntemi:
Bağımlılık ekleme (DI) kapsayıcısıyla aşağıdaki nesneleri kaydeder:
Günlük ileticisi hizmeti
Azure Service Bus istemcisi
Tüm kayıtlı istemciler için kullanılacak varsayılan belirteç kimlik bilgilerini ayarlar.
appsettings.json service bus kitaplığının varsayılan günlük düzeyini değiştirin. Örneğin, Debug anahtarı aşağıdaki gibi ayarlayarak Logging:LogLevel:Azure.Messaging.ServiceBus geçiş yapın:
Anahtar olarak ayarlandığından Logging:LogLevel:Azure.Messaging.ServiceBusDebug, en fazla Service Bus istemci olayları günlüğe EventLevel.Verbose kaydedilir.
Azure SDK kitaplığı, DI kapsayıcısına istemci IServiceCollection kaydetmek için bir uzantı yöntemi içermez.
Uygulamanız, diğer Azure SDK kitaplıklarına bağlı Olan Azure uzantı kitaplıklarını kullanır. Bu tür Azure uzantı kitaplıklarına örnek olarak şunlar verilebilir:
Program.cs günlük ileticisi hizmetini DI kapsayıcısında tekil olarak kaydedin:
C#
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());
DI kapsayıcısından günlük ileticisi hizmetini getirin ve yöntemini çağırın Start . Örneğin, ASP.NET Core Razor Pages sayfa modeli sınıfında oluşturucu ekleme kullanarak:
C#
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.Azure;
publicclassIndexModel : PageModel
{publicIndexModel(AzureEventSourceLogForwarder logForwarder) =>
logForwarder.Start();
appsettings.json'de Azure Core kitaplığının varsayılan günlük düzeyini değiştirin. Örneğin, Debug anahtarı aşağıdaki gibi ayarlayarak Logging:LogLevel:Azure.Core geçiş yapın:
Kitaplığın istemcisini oluşturun veya kaydedin. Dağıtım her iki durumda da destek sunar.
C#
awaitusingvar client = new ServiceBusClient("<connection_string>");
appsettings.json service bus kitaplığının varsayılan günlük düzeyini değiştirin. Örneğin, Debug anahtarı aşağıdaki gibi ayarlayarak Logging:LogLevel:Azure.Messaging.ServiceBus geçiş yapın:
Anahtar olarak ayarlandığından Logging:LogLevel:Azure.Messaging.ServiceBusDebug, en fazla Service Bus istemci olayları günlüğe EventLevel.Verbose kaydedilir.
HTTP isteğini ve yanıt gövdelerini günlüğe kaydetme
Not
Bu özellik yalnızca BIR Azure hizmetiyle iletişim kurmak için HTTP kullanan kitaplıklar için geçerlidir. AMQP gibi alternatif protokollere dayalı kitaplıklar içerik günlüğünü desteklemez. Desteklenmeyen örnekler arasında Event Hubs, Service Bus ve Web PubSub gibi Azure hizmetlerine yönelik kitaplıklar yer alır.
Temel alınan Azure hizmetinin REST API'sine gönderilen HTTP isteği gövdesi.
Azure hizmetinin REST API'sinden alınan HTTP yanıt gövdesi.
Varsayılan olarak, yukarıda belirtilen içeriğin günlüğe kaydedilmesi devre dışı bırakılır. HTTP isteğinin ve yanıt gövdelerinin günlüğe kaydedilmesini etkinleştirmek için aşağıdaki adımları tamamlayın:
İstemci seçenekleri nesnesinin IsLoggingContentEnabled özelliğini olarak trueayarlayın ve options nesnesini istemcinin oluşturucusna geçirin. Örneğin, Azure Key Vault Gizli Dizileri kitaplığına yönelik HTTP isteklerini ve yanıtlarını günlüğe kaydetmek için:
C#
var clientOptions = new SecretClientOptions
{
Diagnostics =
{
IsLoggingContentEnabled = true
}
};
var client = new SecretClient(
new Uri("https://<keyvaultname>.vault.azure.net/"),
new DefaultAzureCredential(),
clientOptions);
Ayrıntılı/hata ayıklama veya daha yüksek bir olay/günlük düzeyiyle tercih ettiğiniz günlük yaklaşımını kullanın. Belirli yönergeler için aşağıdaki tabloda yaklaşımınızı bulun.
.NET günlüğü ve izlemesi hakkında daha fazla bilgi edinin
GitHub'da bizimle işbirliği yapın
Bu içeriğin kaynağı GitHub'da bulunabilir; burada ayrıca sorunları ve çekme isteklerini oluşturup gözden geçirebilirsiniz. Daha fazla bilgi için katkıda bulunan kılavuzumuzu inceleyin.
.NET geri bildirimi
.NET, açık kaynak bir projedir. Geri bildirim sağlamak için bir bağlantı seçin:
Diğer geliştiriciler ve uzmanlarla gerçek dünyadaki kullanım örneklerini temel alan ölçeklenebilir yapay zeka çözümleri oluşturmak için toplantı serisine katılın.