Ekinlikler
Microsoft Learn Sınaması'na katılın
19 Kas 23 - 10 Oca 23
Ignite Edition - Microsoft Azure'da beceriler geliştirin ve 10 Ocak'a kadar dijital rozet kazanın!
Hemen kaydolunBu tarayıcı artık desteklenmiyor.
En son özelliklerden, güvenlik güncelleştirmelerinden ve teknik destekten faydalanmak için Microsoft Edge’e yükseltin.
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:
Ö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.
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:
HTTP yanıt günlüğü girdisi:
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:
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.
.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:
using AzureEventSourceListener listener =
AzureEventSourceListener.CreateConsoleLogger();
İ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:
using AzureEventSourceListener listener =
AzureEventSourceListener.CreateTraceLogger(EventLevel.Verbose);
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-Core
kullanı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 (e.EventSource.Name == "Azure-Core")
{
Console.WriteLine($"{DateTime.Now} {message}");
}
},
level: EventLevel.Verbose);
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 LogLevel
ile 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 |
Ö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.Azure
Program.cs'da, uzantı yöntemine bir çağrı yoluyla 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"));
azureBuilder.UseCredential(new DefaultAzureCredential());
});
Yukarıdaki örnekte AddAzureClients
yöntemi:
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:
{
"ConnectionStrings": {
"ServiceBus": "<connection_string>"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning",
"Azure.Messaging.ServiceBus": "Debug"
}
},
"AllowedHosts": "*"
}
Anahtar olarak ayarlandığından Logging:LogLevel:Azure.Messaging.ServiceBus
Debug
, en fazla Service Bus istemci olayları günlüğe EventLevel.Verbose
kaydedilir.
Bir Azure SDK kitaplığının istemcisini DI kapsayıcısıyla kaydetmenin imkansız veya gereksiz olduğu senaryolar vardır:
IServiceCollection
kaydetmek için bir uzantı yöntemi içermez.Bu senaryolarda aşağıdaki adımları tamamlayın:
Microsoft.Extensions.Azure NuGet paketini yükleyin:
dotnet add package Microsoft.Extensions.Azure
Program.cs günlük ileticisi hizmetini DI kapsayıcısında tekil 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 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:
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.Azure;
public class IndexModel : PageModel
{
public IndexModel(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:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning",
"Azure.Core": "Debug"
}
},
"AllowedHosts": "*"
}
Anahtar olarak ayarlandığından Logging:LogLevel:Azure.Core
Debug
, en fazla Azure Core kitaplık olayları günlüğe EventLevel.Verbose
kaydedilir.
Daha fazla bilgi için, bkz. .NET Core ve ASP.NET Core'da günlüğe kaydetme.
Sürümünden 1.2.0
başlayarak Azure İzleyici OpenTelemetry dağıtımı, 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.AspNetCore
Kitaplığı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 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:
{
"ConnectionStrings": {
"ServiceBus": "<connection_string>"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning",
"Azure.Messaging.ServiceBus": "Debug"
}
},
"AllowedHosts": "*"
}
Anahtar olarak ayarlandığından Logging:LogLevel:Azure.Messaging.ServiceBus
Debug
, en fazla Service Bus istemci olayları günlüğe EventLevel.Verbose
kaydedilir.
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.
İstemci kitaplığında beklenmeyen davranış sorunlarını giderirken, aşağıdaki öğeleri incelemek yararlı olur:
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 true
ayarlayı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:
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.
Yaklaşım | Yönergeler |
---|---|
Yerleşik yöntemlerle günlüğe kaydetmeyi etkinleştirme | Veya veya'ya EventLevel.LogAlways geçirme EventLevel.Verbose AzureEventSourceListener.CreateConsoleLogger AzureEventSourceListener.CreateTraceLogger |
Özel günlüğü yapılandırma | Sınıfın AzureEventSourceListener level oluşturucu parametresini veya olarak EventLevel.Verbose ayarlayın EventLevel.LogAlways |
ASP.NET Core günlüğüne eşleme | appsettings.json ekle "Azure.Core": "Debug" |
.NET geri bildirimi
.NET, açık kaynak bir projedir. Geri bildirim sağlamak için bir bağlantı seçin:
Ekinlikler
Microsoft Learn Sınaması'na katılın
19 Kas 23 - 10 Oca 23
Ignite Edition - Microsoft Azure'da beceriler geliştirin ve 10 Ocak'a kadar dijital rozet kazanın!
Hemen kaydolunEğitim
Modül
App Service Tanılama Günlüğüyle Web Uygulaması Günlüklerini Yakalama - Training
Azure web uygulamalarınızdan izleme çıkışı yakalamayı öğrenin. Canlı günlük akışını görüntüleyin ve çevrimdışı analiz için günlük dosyalarını indirin.