.NET ile uygulama Analizler günlüğü

Bu makalede, sağlayıcı paketini kullanarak .NET uygulamalarında Application Analizler ile günlükleri yakalamayı Microsoft.Extensions.Logging.ApplicationInsights öğreneceksiniz. Bu sağlayıcıyı kullanıyorsanız Application Insights araçlarını kullanarak günlüklerinizi sorgulayabilir ve analiz edebilirsiniz.

Not

Aşağıdaki belgeler, Uygulama Analizler klasik API'sine dayanır. Uygulama Analizler için uzun vadeli plan, OpenTelemetry kullanarak veri toplamaktır. Daha fazla bilgi için bkz . .NET, Node.js, Python ve Java uygulamaları için Azure İzleyici OpenTelemetry'yi etkinleştirme.

Not

Günlüğe kaydetmeyle birlikte Uygulama Analizler telemetrisinin tamamını uygulamak istiyorsanız bkz. ASP.NET web siteleriniz için Uygulama Analizler yapılandırma veya ASP.NET Core uygulamaları için Uygulama Analizler.

İpucu

Microsoft.ApplicationInsights.WorkerService Arka plan hizmetleri için Uygulama Analizler etkinleştirmek için kullanılan NuGet paketi kapsam dışındadır. Daha fazla bilgi için bkz. Çalışan Hizmeti uygulamaları için Uygulama Analizler.

ASP.NET Core uygulamaları

ASP.NET Core uygulamalarına Uygulama Analizler günlüğü eklemek için:

  1. öğesini Microsoft.Extensions.Logging.ApplicationInsightsyükleyin.

  2. Ekle ApplicationInsightsLoggerProvider:

using Microsoft.Extensions.Logging.ApplicationInsights;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.

builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

builder.Logging.AddApplicationInsights(
        configureTelemetryConfiguration: (config) => 
            config.ConnectionString = builder.Configuration.GetConnectionString("APPLICATIONINSIGHTS_CONNECTION_STRING"),
            configureApplicationInsightsLoggerOptions: (options) => { }
    );

builder.Logging.AddFilter<ApplicationInsightsLoggerProvider>("your-category", LogLevel.Trace);

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();

app.UseAuthorization();

app.MapControllers();

app.Run();

NuGet paketi yüklü ve sağlayıcı bağımlılık ekleme ile kaydedildikten sonra uygulama günlüğe kaydetmeye hazırdır. Oluşturucu ekleme ILogger ile veya genel tür alternatifi ILogger<TCategoryName> gereklidir. Bu uygulamalar çözümlendiğinde bunları ApplicationInsightsLoggerProvider sağlar. Günlüğe kaydedilen iletiler veya özel durumlar Uygulama Analizler gönderilir.

Aşağıdaki örnek denetleyiciyi göz önünde bulundurun:

public class ValuesController : ControllerBase
{
    private readonly ILogger _logger;

    public ValuesController(ILogger<ValuesController> logger)
    {
        _logger = logger;
    }

    [HttpGet]
    public ActionResult<IEnumerable<string>> Get()
    {
        _logger.LogWarning("An example of a Warning trace..");
        _logger.LogError("An example of an Error level message");

        return new string[] { "value1", "value2" };
    }
}

Daha fazla bilgi için bkz. ASP.NET Core'da günlüğe kaydetme ve ILogger günlüklerinden hangi Uygulama Analizler telemetri türü oluşturuldu? Uygulama Analizler'nde ILogger günlüklerini nerede görebilirim?.

Konsol uygulaması

Konsol uygulamalarına Uygulama Analizler günlüğü eklemek için önce aşağıdaki NuGet paketlerini yükleyin:

Aşağıdaki örnek Microsoft.Extensions.Logging.Application Analizler paketini kullanır ve konsol uygulaması için varsayılan davranışı gösterir. Microsoft.Extensions.Logging.Application Analizler paketi, bir konsol uygulamasında veya ölçümler, dağıtılmış izleme, örnekleme ve telemetri başlatıcıları gibi tam özellik kümesi olmadan Uygulama Analizler'nin en düşük düzeyde uygulanmasını istediğinizde kullanılmalıdır.

using Microsoft.ApplicationInsights.Channel;
using Microsoft.ApplicationInsights.Extensibility;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;

using var channel = new InMemoryChannel();

try
{
    IServiceCollection services = new ServiceCollection();
    services.Configure<TelemetryConfiguration>(config => config.TelemetryChannel = channel);
    services.AddLogging(builder =>
    {
        // Only Application Insights is registered as a logger provider
        builder.AddApplicationInsights(
            configureTelemetryConfiguration: (config) => config.ConnectionString = "<YourConnectionString>",
            configureApplicationInsightsLoggerOptions: (options) => { }
        );
    });

    IServiceProvider serviceProvider = services.BuildServiceProvider();
    ILogger<Program> logger = serviceProvider.GetRequiredService<ILogger<Program>>();

    logger.LogInformation("Logger is working...");
}
finally
{
    // Explicitly call Flush() followed by Delay, as required in console apps.
    // This ensures that even if the application terminates, telemetry is sent to the back end.
    channel.Flush();

    await Task.Delay(TimeSpan.FromMilliseconds(1000));
}

Daha fazla bilgi için bkz. ILogger günlüklerinden hangi Uygulama Analizler telemetri türü üretilir? Uygulama Analizler'da ILogger günlüklerini nerede görebilirim?.

Günlük kapsamları

ApplicationInsightsLoggingProvidergünlük kapsamlarını destekler. Kapsamlar varsayılan olarak etkindir.

Kapsam türündeyse IReadOnlyCollection<KeyValuePair<string,object>>koleksiyondaki her anahtar/değer çifti Özel özellikler olarak Uygulama Analizler telemetrisine eklenir. Aşağıdaki örnekte günlükler olarak TraceTelemetry yakalanır ve özelliklerinde bulunur ("MyKey", "MyValue") .

using (_logger.BeginScope(new Dictionary<string, object> { ["MyKey"] = "MyValue" }))
{
    _logger.LogError("An example of an Error level message");
}

Kapsam olarak başka bir tür kullanılıyorsa, Uygulama Analizler telemetrisinde özelliği Scope altında depolanır. Aşağıdaki örnekte, TraceTelemetry kapsamı içeren adlı Scope bir özelliği vardır.

    using (_logger.BeginScope("hello scope"))
    {
        _logger.LogError("An example of an Error level message");
    }

Sık sorulan sorular

ILogger günlüklerinden hangi Uygulama Analizler telemetri türü üretilir? Uygulama Analizler'nde ILogger günlüklerini nerede görebilirim?

ApplicationInsightsLoggerProvider günlükleri ILogger yakalar ve bunlardan oluşturur TraceTelemetry . üzerinde yöntemine ExceptionTelemetryLogILoggerbir Exception nesne geçirilirse, yerine TraceTelemetryoluşturulur.

ILogger Telemetrisi Görüntüleme

Azure Portalı'nda:

  1. Azure Portal'a gidin ve Uygulama Analizler kaynağınıza erişin.
  2. Uygulama Analizler içindeki "Günlükler" bölümüne tıklayın.
  3. Genellikle tabloda depolanan traces ILogger iletilerini sorgulamak için Kusto Sorgu Dili (KQL) kullanın.
    • Örnek Sorgu: traces | where message contains "YourSearchTerm".
  4. ILogger verilerini önem derecesine, zaman aralığına veya belirli ileti içeriğine göre filtrelemek için sorgularınızı geliştirin.

Visual Studio'da (Yerel Hata Ayıklayıcı):

  1. Visual Studio'da uygulamanızı hata ayıklama modunda başlatın.
  2. Uygulama çalışırken "Tanılama Araçları" penceresini açın.
  3. "Olaylar" sekmesinde ILogger günlükleri diğer telemetri verileriyle birlikte görüntülenir.
  4. Belirli ILogger iletilerini bulmak için "Tanılama Araçları" penceresindeki arama ve filtreleme özelliklerini kullanın.

her zaman göndermeyi TraceTelemetrytercih ediyorsanız şu kod parçacığını kullanın:

builder.AddApplicationInsights(
    options => options.TrackExceptionsAsExceptionTelemetry = false);

Neden bazı ILogger günlükleri diğerleriyle aynı özelliklere sahip değil?

Uygulama Analizler her telemetri için kullanılan bilgileri kullanarak TelemetryConfiguration günlükleri yakalar ve gönderirILogger. Ama bir istisna var. Varsayılan olarak, TelemetryConfiguration Program.cs veya Startup.cs oturum açtığınızda tam olarak ayarlanmadı. Bu yerlerden gelen günlükler varsayılan yapılandırmaya sahip olmadığından tüm TelemetryInitializer örnekleri ve TelemetryProcessor örnekleri çalıştırmıyorlar.

Microsoft.Extensions.Logging.Application Analizler tek başına paketini kullanıyorum ve daha fazla özel telemetriyi el ile günlüğe kaydetmek istiyorum. Bunu nasıl yapmalıyım?

Tek başına paketi kullandığınızda bağımlılık TelemetryClient ekleme (DI) kapsayıcısına eklenmez. Öğesinin TelemetryClient yeni bir örneğini oluşturmanız ve aşağıdaki kodda gösterildiği gibi günlükçü sağlayıcısının kullandığı yapılandırmayı kullanmanız gerekir. Bu gereksinim, tüm özel telemetri ve telemetri ILoggeriçin aynı yapılandırmanın kullanılmasını sağlar.

public class MyController : ApiController
{
   // This TelemetryClient instance can be used to track additional telemetry through the TrackXXX() API.
   private readonly TelemetryClient _telemetryClient;
   private readonly ILogger _logger;

   public MyController(IOptions<TelemetryConfiguration> options, ILogger<MyController> logger)
   {
        _telemetryClient = new TelemetryClient(options.Value);
        _logger = logger;
   }  
}

Not

Application Analizler'ı etkinleştirmek için paketini kullanırsanızMicrosoft.ApplicationInsights.AspNetCore, bu kodu doğrudan oluşturucuya alacak TelemetryClient şekilde değiştirin.

SDK yüklü değil ve ASP.NET Core uygulamalarım için Uygulama Analizler etkinleştirmek için Azure Web Apps uzantısını kullanıyorum. Yeni sağlayıcıyı Nasıl yaparım? kullanıyorsunuz?

Azure Web Apps'teki Uygulama Analizler uzantısı yeni sağlayıcıyı kullanır. Uygulamanızın appsettings.json dosyasındaki filtreleme kurallarını değiştirebilirsiniz.

Sonraki adımlar