Aracılığıyla paylaş


.NET için Azure SDK ile loglama

.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:

Ö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:

  1. Microsoft.Extensions.Azure NuGet paketini yükleyin:

    dotnet add package Microsoft.Extensions.Azure
    
  2. Program.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 AddAzureClients yö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.
  3. appsettings.json içinde Service Bus kitaplığının varsayılan günlük seviyesini değiştirin. Örneğin, Debug tuşunu aşağıdaki gibi ayarlayarak Logging:LogLevel:Azure.Messaging.ServiceBus konumuna geçiş yapın.

    {
        "ConnectionStrings": {
            "ServiceBus": "<connection_string>"
        },
        "Logging": {
            "LogLevel": {
                "Default": "Information",
                "Microsoft.AspNetCore": "Warning",
                "Azure.Messaging.ServiceBus": "Debug"
            }
        },
        "AllowedHosts": "*"
    }
    

    Logging:LogLevel:Azure.Messaging.ServiceBus anahtarı Debug olarak ayarlandığı için, EventLevel.Verbose kadar 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:

Bu senaryolarda aşağıdaki adımları tamamlayın:

  1. Microsoft.Extensions.Azure NuGet paketini yükleyin:

    dotnet add package Microsoft.Extensions.Azure
    
  2. Program.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());
    
  3. 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();
    
  4. appsettings.json içinde Azure Core kitaplığının varsayılan günlük düzeyini değiştirin. Örneğin, Debug tuşunu aşağıdaki gibi ayarlayarak Logging:LogLevel:Azure.Core konumuna geçiş yapın.

    {
      "Logging": {
        "LogLevel": {
          "Default": "Information",
          "Microsoft.AspNetCore": "Warning",
          "Azure.Core": "Debug"
        }
      },
      "AllowedHosts": "*"
    }
    

    Logging:LogLevel:Azure.Core anahtarı Debug olarak ayarlandığından, EventLevel.Verbose kadar 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:

  1. Azure.Monitor.OpenTelemetry.AspNetCore NuGet paketini yükleyin:

    dotnet add package Azure.Monitor.OpenTelemetry.AspNetCore
    
  2. Kitaplığın istemcisini oluşturun veya kaydedin. Dağıtım her iki durumda da destek sunar.

    await using var client = new ServiceBusClient("<connection_string>");
    
  3. appsettings.json içinde Service Bus kitaplığının varsayılan günlük seviyesini değiştirin. Örneğin, Debug tuşunu aşağıdaki gibi ayarlayarak Logging:LogLevel:Azure.Messaging.ServiceBus konumuna geçiş yapın.

    {
        "ConnectionStrings": {
            "ServiceBus": "<connection_string>"
        },
        "Logging": {
            "LogLevel": {
                "Default": "Information",
                "Microsoft.AspNetCore": "Warning",
                "Azure.Messaging.ServiceBus": "Debug"
            }
        },
        "AllowedHosts": "*"
    }
    

    Logging:LogLevel:Azure.Messaging.ServiceBus anahtarı Debug olarak ayarlandığı için, EventLevel.Verbose kadar 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:

  1. İ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);
    
  2. 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.Verbose veya EventLevel.LogAlways'yi AzureEventSourceListener.CreateConsoleLogger veya AzureEventSourceListener.CreateTraceLogger'ye geçirin
    Özel günlüğü yapılandırma AzureEventSourceListener sınıfının level oluşturucu parametresini EventLevel.Verbose veya EventLevel.LogAlways olarak ayarlayın.
    ASP.NET Core günlüğüne eşleme işlemi "Azure.Core": "Debug" ekle appsettings.json

Sonraki Adımlar