Aracılığıyla paylaş


.NET ile Application Insights günlüğü

Bu makalede, sağlayıcı paketini kullanarak .NET uygulamalarında Application Insights 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 Application Insights klasik API'sine dayanır. Application Insights 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 ve OpenTelemetry Yol Haritamız. Geçiş kılavuzu .NET, Node.js ve Python için kullanılabilir.

Not

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

İpucu

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

ASP.NET Core uygulamaları

ASP.NET Core uygulamalarına Application Insights 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üklendikten 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 Application Insights'a 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 Application Insights telemetri türü oluşturuldu? Application Insights'ta ILogger günlüklerini nerede görebilirim?.

Konsol uygulaması

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

Aşağıdaki örnek Microsoft.Extensions.Logging.ApplicationInsights paketini kullanır ve konsol uygulaması için varsayılan davranışı gösterir. Microsoft.Extensions.Logging.ApplicationInsights 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 Application Insights'ın 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 Application Insights telemetri türü üretilir? Application Insights'ta 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 Application Insights telemetrisine özel özellikler olarak 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ırsa, Application Insights 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 Application Insights telemetri türü üretilir? Application Insights'ta ILogger günlüklerini nerede görebilirim?

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

ILogger Telemetrisi Görüntüleme

Azure portalında:

  1. Azure portalına gidin ve Application Insights kaynağınıza erişin.
  2. Application Insights içindeki Günlükler bölümünü seçin.
  3. 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?

Application Insights 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.ApplicationInsights 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 Insights'ı Microsoft.ApplicationInsights.AspNetCore etkinleştirmek için paketini kullanırsanız, bu kodu doğrudan oluşturucuya alacak TelemetryClient şekilde değiştirin.

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

Azure Web Apps'teki Application Insights 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