.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:
öğesini
Microsoft.Extensions.Logging.ApplicationInsights
yükleyin.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ı
ApplicationInsightsLoggingProvider
gü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
ILogger
bir Exception
nesne geçirilirse, yerine TraceTelemetry
oluşturulur.
ILogger Telemetrisi Görüntüleme
Azure portalında:
- Azure portalına gidin ve Application Insights kaynağınıza erişin.
- Application Insights içindeki Günlükler bölümünü seçin.
- Tabloda depolanan
traces
ILogger iletilerini sorgulamak için Kusto Sorgu Dili (KQL) kullanın. Örnek Sorgu:traces | where message contains "YourSearchTerm"
. - 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ı):
- Visual Studio'da uygulamanızı hata ayıklama modunda başlatın.
- Uygulama çalışırken Tanılama Araçları penceresini açın.
- Olaylar sekmesinde ILogger günlükleri diğer telemetri verileriyle birlikte görüntülenir.
- Belirli ILogger iletilerini bulmak için Tanılama Araçları penceresindeki arama ve filtreleme özelliklerini kullanın.
her zaman göndermeyi TraceTelemetry
tercih 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 ILogger
iç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.