Rejestrowanie Szczegółowe informacje aplikacji przy użyciu platformy .NET
Z tego artykułu dowiesz się, jak przechwytywać dzienniki przy użyciu aplikacji Szczegółowe informacje w aplikacjach platformy .NET przy użyciu pakietu dostawcyMicrosoft.Extensions.Logging.ApplicationInsights
. Jeśli używasz tego dostawcy, możesz wykonywać zapytania i analizować dzienniki przy użyciu narzędzi usługi Application Insights.
Uwaga
Poniższa dokumentacja opiera się na klasycznym interfejsie API usługi Application Szczegółowe informacje. Długoterminowy plan Szczegółowe informacje aplikacji polega na zbieraniu danych przy użyciu biblioteki OpenTelemetry. Aby uzyskać więcej informacji, zobacz Enable Azure Monitor OpenTelemetry for .NET, Node.js, Python and Java applications (Włączanie usługi Azure Monitor OpenTelemetry dla platformy .NET, Node.js, Python i Java applications).
Uwaga
Jeśli chcesz zaimplementować pełny zakres danych telemetrycznych usługi Application Szczegółowe informacje wraz z rejestrowaniem, zobacz Konfigurowanie Szczegółowe informacje aplikacji dla witryn internetowych ASP.NET lub aplikacji Szczegółowe informacje dla aplikacji ASP.NET Core.
Napiwek
Microsoft.ApplicationInsights.WorkerService
Pakiet NuGet używany do włączania Szczegółowe informacje aplikacji dla usług w tle jest poza zakresem. Aby uzyskać więcej informacji, zobacz Application Szczegółowe informacje for Worker Service apps (Aplikacja Szczegółowe informacje dla aplikacji usługi Worker Service).
aplikacje ASP.NET Core
Aby dodać rejestrowanie Szczegółowe informacje aplikacji do aplikacji ASP.NET Core:
Zainstaluj program
Microsoft.Extensions.Logging.ApplicationInsights
.Dodaj
ApplicationInsightsLoggerProvider
polecenie :
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();
Po zainstalowaniu pakietu NuGet i zarejestrowaniu dostawcy za pomocą iniekcji zależności aplikacja jest gotowa do rejestrowania. W przypadku iniekcji ILogger konstruktora wymagana jest alternatywa ILogger<TCategoryName> typu ogólnego lub ogólnego. Po rozwiązaniu ApplicationInsightsLoggerProvider
tych implementacji udostępnia je. Zarejestrowane komunikaty lub wyjątki są wysyłane do Szczegółowe informacje aplikacji.
Rozważmy następujący przykładowy kontroler:
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" };
}
}
Aby uzyskać więcej informacji, zobacz Rejestrowanie w ASP.NET Core i Jaki typ telemetrii aplikacji Szczegółowe informacje jest generowany z dzienników ILogger? Gdzie można wyświetlić dzienniki ILogger w aplikacji Szczegółowe informacje?.
Aplikacja konsolowa
Aby dodać rejestrowanie aplikacji Szczegółowe informacje do aplikacji konsolowych, najpierw zainstaluj następujące pakiety NuGet:
W poniższym przykładzie użyto pakietu Microsoft.Extensions.Logging.Application Szczegółowe informacje i pokazano domyślne zachowanie aplikacji konsolowej. Pakiet Microsoft.Extensions.Logging.Application Szczegółowe informacje powinien być używany w aplikacji konsolowej lub zawsze, gdy potrzebujesz minimalnej implementacji aplikacji Szczegółowe informacje bez pełnego zestawu funkcji, takiego jak metryki, śledzenie rozproszone, próbkowanie i inicjatory telemetrii.
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));
}
Aby uzyskać więcej informacji, zobacz What Application Szczegółowe informacje telemetry type is produced from ILogger logs? (Jaki typ telemetrii aplikacji Szczegółowe informacje jest generowany na podstawie dzienników ILogger? Gdzie można wyświetlić dzienniki ILogger w aplikacji Szczegółowe informacje?.
Zakresy rejestrowania
ApplicationInsightsLoggingProvider
obsługuje zakresy dzienników. Zakresy są domyślnie włączone.
Jeśli zakres jest typu IReadOnlyCollection<KeyValuePair<string,object>>
, każda para klucz/wartość w kolekcji zostanie dodana do telemetrii Application Szczegółowe informacje jako właściwości niestandardowych. W poniższym przykładzie dzienniki są przechwytywane jako TraceTelemetry
i mają ("MyKey", "MyValue")
właściwości .
using (_logger.BeginScope(new Dictionary<string, object> { ["MyKey"] = "MyValue" }))
{
_logger.LogError("An example of an Error level message");
}
Jeśli jakikolwiek inny typ jest używany jako zakres, jest przechowywany w ramach właściwości Scope
w usłudze Application Szczegółowe informacje telemetrii. W poniższym przykładzie TraceTelemetry
ma właściwość o nazwie Scope
, która zawiera zakres.
using (_logger.BeginScope("hello scope"))
{
_logger.LogError("An example of an Error level message");
}
Często zadawane pytania
Jaki typ telemetrii Szczegółowe informacje aplikacji jest generowany z dzienników ILogger? Gdzie można wyświetlić dzienniki ILogger w aplikacji Szczegółowe informacje?
ApplicationInsightsLoggerProvider
przechwytuje ILogger
dzienniki i tworzy TraceTelemetry
je na ich podstawie. Exception
Jeśli obiekt zostanie przekazany do metody w metodzie w ILogger
metodzie Log
, ExceptionTelemetry
zostanie utworzony zamiast TraceTelemetry
.
Wyświetlanie telemetrii ILogger
W witrynie Azure Portal:
- Przejdź do witryny Azure Portal i uzyskaj dostęp do zasobu Szczegółowe informacje aplikacji.
- Kliknij sekcję "Dzienniki" w Szczegółowe informacje aplikacji.
- Użyj język zapytań Kusto (KQL), aby wykonywać zapytania dotyczące komunikatów ILogger, zwykle przechowywanych w
traces
tabeli.- Przykładowe zapytanie:
traces | where message contains "YourSearchTerm"
.
- Przykładowe zapytanie:
- Uściślij zapytania, aby filtrować dane ILogger według ważności, zakresu czasu lub określonej zawartości wiadomości.
W programie Visual Studio (debuger lokalny):
- Uruchom aplikację w trybie debugowania w programie Visual Studio.
- Otwórz okno "Narzędzia diagnostyczne", gdy aplikacja jest uruchomiona.
- Na karcie "Zdarzenia" dzienniki ILogger są wyświetlane wraz z innymi danymi telemetrycznymi.
- Skorzystaj z funkcji wyszukiwania i filtrowania w oknie "Narzędzia diagnostyczne", aby zlokalizować określone komunikaty ILogger.
Jeśli wolisz zawsze wysyłać TraceTelemetry
, użyj tego fragmentu kodu:
builder.AddApplicationInsights(
options => options.TrackExceptionsAsExceptionTelemetry = false);
Dlaczego niektóre dzienniki ILogger nie mają tych samych właściwości co inne?
Aplikacja Szczegółowe informacje przechwytuje i wysyła ILogger
dzienniki przy użyciu tych samych TelemetryConfiguration
informacji, które są używane dla każdej innego telemetrii. Ale jest wyjątek. Domyślnie TelemetryConfiguration
nie jest w pełni konfigurowany podczas logowania z Program.cs lub Startup.cs. Dzienniki z tych miejsc nie mają konfiguracji domyślnej, więc nie są uruchomione wszystkie TelemetryInitializer
wystąpienia i TelemetryProcessor
wystąpienia.
Używam autonomicznego pakietu Microsoft.Extensions.Logging.Application Szczegółowe informacje i chcę ręcznie rejestrować więcej niestandardowych danych telemetrycznych. Jak to zrobić?
W przypadku korzystania z pakietu TelemetryClient
autonomicznego nie jest wstrzykiwany do kontenera wstrzykiwania zależności (DI). Musisz utworzyć nowe wystąpienie i TelemetryClient
użyć tej samej konfiguracji, której używa dostawca rejestratora, jak pokazano w poniższym kodzie. To wymaganie gwarantuje, że ta sama konfiguracja jest używana dla wszystkich niestandardowych danych telemetrycznych i telemetrii z programu ILogger
.
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;
}
}
Uwaga
Jeśli używasz pakietu do włączenia Microsoft.ApplicationInsights.AspNetCore
Szczegółowe informacje aplikacji, zmodyfikuj ten kod, aby uzyskać TelemetryClient
bezpośrednio w konstruktorze.
Nie mam zainstalowanego zestawu SDK i używam rozszerzenia Azure Web Apps, aby włączyć aplikację Szczegółowe informacje dla aplikacji ASP.NET Core. Jak mogę użyć nowego dostawcy?
Rozszerzenie application Szczegółowe informacje w usłudze Azure Web Apps używa nowego dostawcy. Reguły filtrowania można zmodyfikować w pliku appsettings.json dla aplikacji.