Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
V tomto článku se naučíte, jak přistupovat k logům pomocí Application Insights v aplikacích .NET za použití balíčku zprostředkovatele Microsoft.Extensions.Logging.ApplicationInsights
. Pokud použijete tohoto zprostředkovatele, můžete dotazovat a analyzovat protokoly pomocí nástrojů Application Insights.
Upozornění
Pro nové aplikace nebo zákazníky doporučujeme Azure Monitor OpenTelemetry Distro pro napájení Azure Monitor Application Insights. Distribuce OpenTelemetry služby Azure Monitor poskytuje podobné funkce a prostředí jako sada Application Insights SDK. Ze sady Application Insights SDK je možné migrovat pomocí průvodců migrací pro .NET, Node.js a Python, ale stále pracujeme na přidání několika dalších funkcí pro zpětnou kompatibilitu.
Poznámka:
Pokud chcete implementovat celou řadu telemetrických dat Application Insights spolu s protokolováním, přečtěte si téma Konfigurace Application Insights pro vaše ASP.NET weby nebo Application Insights pro aplikace ASP.NET Core.
Návod
Balíček Microsoft.ApplicationInsights.WorkerService
NuGet, který se používá k povolení Application Insights pro služby na pozadí, je mimo rozsah. Další informace najdete v tématu Application Insights pro aplikace pracovních služeb.
aplikace ASP.NET Core
Přidání protokolování Application Insights do ASP.NET základních aplikací:
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 zaregistrovaným poskytovatelem pro vkládání závislostí je aplikace připravená k logování. Při injektáži konstruktorem pomocí ILogger je vyžadována alternativa ILogger<TCategoryName> generického typu. Když jsou tyto implementace vyřešeny, ApplicationInsightsLoggerProvider
poskytuje je. Protokolované zprávy nebo výjimky se odesílají do Application Insights.
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ý typ telemetrie Application Insights se vytváří z protokolů ILoggeru? Kde se v Application Insights zobrazují protokoly ILoggeru?
Konzolová aplikace
Pokud chcete přidat protokolování Application Insights do konzolových aplikací, nejprve nainstalujte následující balíčky NuGet:
Následující příklad používá balíček Microsoft.Extensions.Logging.ApplicationInsights a ukazuje výchozí chování konzolové aplikace. Balíček Microsoft.Extensions.Logging.ApplicationInsights by se měl používat v konzolové aplikaci nebo kdykoli chcete použít minimální implementaci Application Insights 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ý typ telemetrie Application Insights se vytváří z protokolů ILoggeru? Kde se v Application Insights zobrazují protokoly ILoggeru?
Rozsahy logování
ApplicationInsightsLoggingProvider
podporuje obory protokolů. Rozsahy jsou ve výchozím nastavení povolené.
Pokud je rozsah typu IReadOnlyCollection<KeyValuePair<string,object>>
, pak se každý pár klíč/hodnota v kolekci přidá do telemetrie Application Insights jako vlastní atributy. 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 je jako obor použit jakýkoli jiný typ, uloží se pod vlastnost Scope
v telemetrii Application Insights. 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");
}
Další kroky
- Nejčastější dotazy (FAQ) o protokolování s využitím .NET najdete zde.
- Ověřte, že používáte podporovanou verzi sady Application Insights SDK.
- Protokolování v .NET
- Logování v ASP.NET Core
- Protokoly trasování .NET v Application Insights