Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
.NET için Azure SDK'sının istemci kütüphaneleri, istemci kütüphane işlemlerini günlüğe kaydetme özelliğini içerir. Bu günlük kaydı, istemci kitaplıklarının Azure hizmetlerine yaptığı Giriş/Çıkış isteklerini ve yanıtlarını takip etmenizi sağlar. Günlükler genellikle iletişim sorunlarını tanılama yapmak veya hata ayıklamak 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:
- Yerleşik yöntemlerle günlüğe kaydetmeyi etkinleştirme
- Özel günlüğü yapılandırma
- ASP.NET Core günlüğüne eşleme işlemi
Önemli
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.
Kayıt bilgileri
SDK, her HTTP isteğini ve yanıtını günlüğe kaydeder, parametre sorgusu ve üst bilgi değerlerini temizleyip güvenli hale getirerek kişisel verileri kaldırır.
HTTP istek günlüğü girişi:
- Benzersiz Kimlik
- HTTP yöntemi
- URI (Evrensel Kaynak Tanımlayıcısı)
- Giden istek üst bilgileri
HTTP yanıt günlüğü girdisi:
- G/Ç işleminin süresi (geçen süre)
- Talep Kimliği
- HTTP durum kodu
- HTTP neden tümceciği
- Yanıt başlıkları
- Uygun olduğunda hata bilgileri
HTTP isteği ve yanıt içeriği:
İçerik akışı,
Content-Typeüst bilgisine bağlı olarak metin ya da bayt olarak sağlanır.Uyarı
İç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 oluşturulur:
- İstek ve yanıt olayları için bilgilendirme
- Hatalar için uyarı
- Ayrıntılı iletiler ve içerik kaydı için detaylı bilgi
Yerleşik yöntemlerle günlüğe kaydetmeyi etkinleştirme
Azure SDK'sı, .NET'in istemci kütüphaneleri olayları System.Diagnostics.Tracing.EventSource sınıfı aracılığıyla, .NET için tipik olan şekilde, 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ük kaydını basitleştirmek amacıyla yararlandığınız sınıfı, Azure.Core.Diagnostics.AzureEventSourceListener, dahil eder; içinde iki statik yöntem bulundurur: 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 ilkelerinden biri, kapsamlı günlükleri gerçek zamanlı olarak görmeyi basitleştirmektir. yöntemi, CreateConsoleLogger günlükleri konsol penceresine tek bir kod satırıyla göndermenizi sağlar:
using AzureEventSourceListener listener =
AzureEventSourceListener.CreateConsoleLogger();
Tanılama izlemelerine günlüğe kaydetme
İzleme dinleyicileri uygularsanız, CreateTraceLogger yöntemini kullanarak standart .NET olay izleme mekanizmasına (System.Diagnostics.Tracing) kaydedebilirsiniz. .NET'te olay izleme hakkında daha fazla bilgi için bkz. İzleme Dinleyicileri.
Bu örnek, ayrıntılı ("verbose") günlük düzeyini belirtir.
using AzureEventSourceListener listener =
AzureEventSourceListener.CreateTraceLogger(EventLevel.Verbose);
Özel log 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. Yazdığınız bir geri çağırma yöntemini bu örneğe geçirin. İstediğiniz şekilde işleyebileceğiniz günlük iletilerini bu yöntem 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.
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 (string.Equals(e.EventSource.Name, "Azure-Core", StringComparison.Ordinal))
{
Console.WriteLine($"{DateTime.Now} {message}");
}
},
level: EventLevel.Verbose);
ASP.NET Core kayıt tutmaya eşleme
AzureEventSourceLogForwarder hizmeti, günlük kaydı için standart ASP.NET Core günlük yapılandırmasını kullanmanızı sağlar. Bu hizmet, Azure SDK olay kaynaklarından gelen günlük iletilerini ILoggerFactory adresine iletir.
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 kayıt işlemi ile loglama
Örnek olarak Azure Service Bus kitaplığını kullanarak aşağıdaki adımları tamamlayın:
Microsoft.Extensions.Azure NuGet paketini yükleyin:
dotnet add package Microsoft.Extensions.AzureProgram.cs'de, uzantı yöntemine yapılan bir çağrı aracılığıyla Azure SDK kitaplığının istemcisini AddAzureClients kaydedin:
using Azure.Identity; using Microsoft.Extensions.Azure; // code omitted for brevity builder.Services.AddAzureClients(azureBuilder => { azureBuilder.AddServiceBusClient( builder.Configuration.GetConnectionString("ServiceBus")); });Yukarıdaki örnekte
AddAzureClientsyöntemi:- Bağımlılık ekleme (DI) kapsayıcısıyla aşağıdaki nesneleri kaydeder:
- Kayıt yönlendirme hizmeti
- Azure Service Bus istemcisi
- DefaultAzureCredential Farklı bir kimlik bilgisi açıkça yapılandırılmadığı sürece kimlik doğrulaması için otomatik olarak uygulanır.
- Bağımlılık ekleme (DI) kapsayıcısıyla aşağıdaki nesneleri kaydeder:
appsettings.json içinde Service Bus kitaplığının varsayılan günlük seviyesini değiştirin. Örneğin,
Debugtuşunu aşağıdaki gibi ayarlayarakLogging:LogLevel:Azure.Messaging.ServiceBuskonumuna geçiş yapın.{ "ConnectionStrings": { "ServiceBus": "<connection_string>" }, "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning", "Azure.Messaging.ServiceBus": "Debug" } }, "AllowedHosts": "*" }Logging:LogLevel:Azure.Messaging.ServiceBusanahtarıDebugolarak ayarlandığı için,EventLevel.Verbosekadar Service Bus istemci olayları günlüğe kaydedilecektir.
İstemci kaydı olmadan log tutma
Bir Azure SDK kitaplığının istemcisini DI kapsayıcısıyla kaydetmenin imkansız veya gereksiz olduğu senaryolar vardır:
- Azure SDK kitaplığı, DI kapsayıcısına istemci
IServiceCollectionkaydetmek 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:
Bu senaryolarda aşağıdaki adımları tamamlayın:
Microsoft.Extensions.Azure NuGet paketini yükleyin:
dotnet add package Microsoft.Extensions.AzureProgram.cs dosyasında, DI kapsayıcısına log ileticisi hizmetini singleton olarak kaydedin.
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 log iletici hizmetini alıp yöntemini çalıştırın Start. Örneğin, ASP.NET Core Razor Pages sayfa modeli sınıfında constructor enjeksiyonu kullanarak:
using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.Extensions.Azure; public class IndexModel : PageModel { public IndexModel(AzureEventSourceLogForwarder logForwarder) => logForwarder.Start();appsettings.json içinde Azure Core kitaplığının varsayılan günlük düzeyini değiştirin. Örneğin,
Debugtuşunu aşağıdaki gibi ayarlayarakLogging:LogLevel:Azure.Corekonumuna geçiş yapın.{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning", "Azure.Core": "Debug" } }, "AllowedHosts": "*" }Logging:LogLevel:Azure.CoreanahtarıDebugolarak ayarlandığından,EventLevel.Verbosekadar Azure Core kitaplık olayları günlüğe kaydedilir.
Daha fazla bilgi için, bkz. .NET Core ve ASP.NET Core'da günlüğe kaydetme.
Azure.Monitor.OpenTelemetry.AspNetCore kullanarak log tutma
sürümünden itibaren, 1.2.0, Azure istemci kitaplıklarından gelen günlüklerin yakalanmasını destekler.
.NET Core ve ASP.NET Core'da günlüğe kaydetme bölümünde açıklanan yapılandırma seçeneklerinden herhangi birini kullanarak günlüğü denetleyebilirsiniz.
Örnek olarak Azure Service Bus kitaplığını kullanarak aşağıdaki adımları tamamlayın:
Azure.Monitor.OpenTelemetry.AspNetCore NuGet paketini yükleyin:
dotnet add package Azure.Monitor.OpenTelemetry.AspNetCoreKitaplığın istemcisini oluşturun veya kaydedin. Dağıtım her iki durumda da destek sunar.
await using var client = new ServiceBusClient("<connection_string>");appsettings.json içinde Service Bus kitaplığının varsayılan günlük seviyesini değiştirin. Örneğin,
Debugtuşunu aşağıdaki gibi ayarlayarakLogging:LogLevel:Azure.Messaging.ServiceBuskonumuna geçiş yapın.{ "ConnectionStrings": { "ServiceBus": "<connection_string>" }, "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning", "Azure.Messaging.ServiceBus": "Debug" } }, "AllowedHosts": "*" }Logging:LogLevel:Azure.Messaging.ServiceBusanahtarıDebugolarak ayarlandığı için,EventLevel.Verbosekadar Service Bus istemci olayları günlüğe kaydedilecektir.
HTTP isteği ve yanıt gövdelerini günlüğe kaydet
Uyarı
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.
İstemci kitaplığında beklenmeyen davranış sorunlarını giderirken, aşağıdaki öğeleri incelemek yararlı olur:
- Altta yatan Azure hizmetinin REST API'sine gönderilen HTTP talep 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 Sırları kitaplığına yönelik HTTP isteklerini ve yanıtlarını günlüğe kaydetmek için:var clientOptions = new SecretClientOptions { Diagnostics = { IsLoggingContentEnabled = true } }; var client = new SecretClient( new Uri("https://<keyvaultname>.vault.azure.net/"), new DefaultAzureCredential(), clientOptions);Olay/kayıt düzeyi açık/hata ayıklama veya daha yüksek olan tercih ettiğiniz kaydetme yaklaşımını kullanın. Belirli yönergeler için aşağıdaki tabloda yaklaşımınızı bulun.
Yaklaşım Yönergeler Yerleşik yöntemlerle günlüğe kaydetmeyi etkinleştirme EventLevel.VerboseveyaEventLevel.LogAlways'yiAzureEventSourceListener.CreateConsoleLoggerveyaAzureEventSourceListener.CreateTraceLogger'ye geçirinÖzel günlüğü yapılandırma AzureEventSourceListenersınıfınınleveloluşturucu parametresiniEventLevel.VerboseveyaEventLevel.LogAlwaysolarak ayarlayın.ASP.NET Core günlüğüne eşleme işlemi "Azure.Core": "Debug"ekle appsettings.json
Sonraki Adımlar
- Azure App Service’te uygulamalar için tanılama günlüğünü etkinleştirme
- Azure güvenlik günlüğü ve denetim seçeneklerini gözden geçirme
- Azure platform günlükleriyle çalışmayı öğrenin
- .NET kaydı ve izleme hakkında daha fazla bilgi edinin