Protokolování Přehledy aplikací pomocí .NET
V tomto článku se dozvíte, jak zaznamenávat protokoly pomocí aplikačních Přehledy v aplikacích .NET pomocí Microsoft.Extensions.Logging.ApplicationInsights
balíčku zprostředkovatele. Pokud použijete tohoto zprostředkovatele, můžete dotazovat a analyzovat protokoly pomocí nástrojů Application Insights.
Poznámka:
Následující dokumentace se spoléhá na rozhraní API Přehledy Application Přehledy Classic. Dlouhodobým plánem pro application Přehledy je shromažďovat data pomocí OpenTelemetry. Další informace najdete v tématu Povolení OpenTelemetry služby Azure Monitor pro aplikace .NET, Node.js, Python a Java.
Poznámka:
Pokud chcete implementovat celou řadu telemetrických Přehledy aplikací společně s protokolováním, přečtěte si téma Konfigurace aplikačních Přehledy pro vaše ASP.NET weby nebo Přehledy aplikace pro aplikace ASP.NET Core.
Tip
Balíček Microsoft.ApplicationInsights.WorkerService
NuGet, který se používá k povolení aplikačních Přehledy pro služby na pozadí, je mimo rozsah. Další informace najdete v tématu Aplikace Přehledy pro aplikace pracovních služeb.
aplikace ASP.NET Core
Přidání protokolování Přehledy aplikace do aplikací ASP.NET Core:
Nainstalujte soubor
Microsoft.Extensions.Logging.ApplicationInsights
.Přidat
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();
S nainstalovaným balíčkem NuGet a zprostředkovatel zaregistrovaným pomocí injektáže závislostí je aplikace připravená k protokolování. Při injektáži ILogger konstruktoru je vyžadována alternativa ILogger<TCategoryName> obecného typu. Když jsou tyto implementace vyřešeny, ApplicationInsightsLoggerProvider
poskytuje je. Protokolované zprávy nebo výjimky se odesílají do Přehledy aplikace.
Představte si následující příklad kontroleru:
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" };
}
}
Další informace najdete v tématu Protokolování v ASP.NET Core a jaká aplikace Přehledy typ telemetrie se vytváří z protokolů ILoggeru? Kde se v Přehledy aplikace zobrazují protokoly ILoggeru?
Konzolová aplikace
Pokud chcete do konzolových aplikací přidat protokolování Přehledy aplikace aplikace, nejprve nainstalujte následující balíčky NuGet:
Následující příklad používá balíček Microsoft.Extensions.Logging.Application Přehledy a ukazuje výchozí chování konzolové aplikace. Balíček Microsoft.Extensions.Logging.Application Přehledy by se měl používat v konzolové aplikaci nebo kdykoli chcete použít minimální implementaci aplikačního Přehledy bez úplné sady funkcí, jako jsou metriky, distribuované trasování, vzorkování a inicializátory telemetrie.
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));
}
Další informace najdete v tématu Jaká aplikace Přehledy typ telemetrie se vytváří z protokolů ILoggeru? Kde se v Přehledy aplikace zobrazují protokoly ILoggeru?
Obory protokolování
ApplicationInsightsLoggingProvider
podporuje obory protokolů. Obory jsou ve výchozím nastavení povolené.
Pokud je obor typu IReadOnlyCollection<KeyValuePair<string,object>>
, pak se každý pár klíč/hodnota v kolekci přidá do aplikace Přehledy telemetrii jako vlastní vlastnosti. V následujícím příkladu jsou protokoly zachyceny jako TraceTelemetry
a mají ("MyKey", "MyValue")
ve vlastnostech.
using (_logger.BeginScope(new Dictionary<string, object> { ["MyKey"] = "MyValue" }))
{
_logger.LogError("An example of an Error level message");
}
Pokud se jako obor používá jakýkoli jiný typ, uloží se pod vlastností Scope
v application Přehledy telemetrii. V následujícím příkladu TraceTelemetry
má vlastnost s názvem Scope
, která obsahuje obor.
using (_logger.BeginScope("hello scope"))
{
_logger.LogError("An example of an Error level message");
}
Nejčastější dotazy
Jaký typ telemetrie Přehledy aplikace se vytváří z protokolů ILoggeru? Kde se v Přehledy aplikace zobrazují protokoly ILoggeru?
ApplicationInsightsLoggerProvider
zaznamenává protokoly ILogger
a vytváří TraceTelemetry
z nich. Exception
Pokud je objekt předán metodě Log
on ILogger
, ExceptionTelemetry
je vytvořen místo TraceTelemetry
.
Zobrazení telemetrie ILoggeru
Na webu Azure Portal:
- Přejděte na Azure Portal a přejděte k prostředku Přehledy aplikace.
- Klikněte na oddíl Protokoly v Přehledy aplikace.
- K dotazování zpráv ILoggeru, obvykle uložených
traces
v tabulce, použijte dotazovací jazyk Kusto (KQL).- Příklad dotazu:
traces | where message contains "YourSearchTerm"
.
- Příklad dotazu:
- Zpřesněte dotazy a vyfiltrujte data ILoggeru podle závažnosti, časového rozsahu nebo konkrétního obsahu zprávy.
V sadě Visual Studio (místní ladicí program):
- Spusťte aplikaci v režimu ladění v sadě Visual Studio.
- Během spuštění aplikace otevřete okno Diagnostické nástroje.
- Na kartě Události se zobrazí protokoly ILogger spolu s dalšími telemetrickými daty.
- Pomocí funkcí vyhledávání a filtrování v okně Diagnostické nástroje vyhledejte konkrétní zprávy ILoggeru.
Pokud chcete vždy odesílat TraceTelemetry
, použijte tento fragment kódu:
builder.AddApplicationInsights(
options => options.TrackExceptionsAsExceptionTelemetry = false);
Proč některé protokoly ILoggeru nemají stejné vlastnosti jako jiné?
Aplikace Přehledy zaznamenává a odesílá protokoly ILogger
pomocí stejných TelemetryConfiguration
informací, které se používají pro každou další telemetrii. Ale je tu výjimka. Ve výchozím nastavení TelemetryConfiguration
se při přihlašování z Program.cs nebo Startup.cs úplně nenastaví. Protokoly z těchto míst nemají výchozí konfiguraci, takže nespouštět všechny TelemetryInitializer
instance a TelemetryProcessor
instance.
Používám samostatný balíček Microsoft.Extensions.Logging.Application Přehledy a chci ručně protokolovat další vlastní telemetrii. Jak to mám udělat?
Pokud použijete samostatný balíček, TelemetryClient
nevkážou se do kontejneru injektáže závislostí (DI). Potřebujete vytvořit novou instanci TelemetryClient
a použít stejnou konfiguraci, kterou používá zprostředkovatel loggeru, jak ukazuje následující kód. Tento požadavek zajišťuje, aby se stejná konfigurace používala pro veškerou vlastní telemetrii a telemetrii z 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;
}
}
Poznámka:
Pokud balíček použijete Microsoft.ApplicationInsights.AspNetCore
k povolení Přehledy aplikace, upravte tento kód tak, aby se dostal TelemetryClient
přímo do konstruktoru.
Nemám nainstalovanou sadu SDK a k povolení aplikačních Přehledy pro aplikace ASP.NET Core používám rozšíření Azure Web Apps. Návody použít nového poskytovatele?
Rozšíření Application Přehledy ve službě Azure Web Apps používá nového poskytovatele. Pravidla filtrování můžete upravit v souboru appsettings.json pro vaši aplikaci.