Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Neste artigo, você aprenderá a capturar logs com o Application Insights em aplicativos .NET usando o pacote do provedor Microsoft.Extensions.Logging.ApplicationInsights
. Caso use esse provedor, poderá consultar e analisar os logs usando as ferramentas do Application Insights.
Atenção
Recomendamos a Distribuição OpenTelemetry do Azure Monitor para novos aplicativos ou clientes para alimentar o Application Insights do Azure Monitor. A Distribuição do OpenTelemetry do Azure Monitor oferece funcionalidade e experiência semelhantes às do SDK do Application Insights. É possível migrar do SDK do Application Insights usando os guias de migração para .NET, Node.js e Python, mas ainda estamos trabalhando para adicionar mais alguns recursos que garantam compatibilidade com versões anteriores.
Observação
Se você quiser implementar toda a gama de telemetria do Application Insights juntamente com o registro em log, consulte Configurar o Application Insights para seus sites de ASP.NET ou Application Insights para aplicativos ASP.NET Core.
Dica
O pacote NuGet Microsoft.ApplicationInsights.WorkerService
, usado para habilitar o Application Insights para serviços em segundo plano, está fora do escopo. Para obter mais informações, confira Application Insights para aplicativos do Worker Service.
Aplicativos do ASP.NET Core
Para adicionar registro em log do Application Insights aos aplicativos do ASP.NET Core:
Instale os
Microsoft.Extensions.Logging.ApplicationInsights
.Adicionar
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();
Com o pacote NuGet instalado e o provedor sendo registrado com injeção de dependência, o aplicativo está pronto para o log. Com a injeção de construtor, exija uma ILogger ou a alternativa de tipo genérico ILogger<TCategoryName>, conforme necessário. Quando essas implementações forem resolvidas, o ApplicationInsightsLoggerProvider
as fornecerá. As mensagens ou exceções registradas são enviadas para o Application Insights.
Considere o seguinte exemplo de controlador:
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" };
}
}
Para obter mais informações, confira Registrar em log no ASP.NET Core e Qual tipo de telemetria do Application Insights é produzido a partir de logs do ILogger? Onde posso ver os logs do ILogger no Application Insights?.
Aplicativo de console
Para adicionar o registro em log do Application Insights aos aplicativos de console, primeiro instale os seguintes pacotes NuGet:
O exemplo a seguir usa o pacote Microsoft.Extensions.Logging.ApplicationInsights e demonstra o comportamento padrão de um aplicativo de console. O pacote Microsoft.Extensions.Logging.ApplicationInsights deve ser usado em um aplicativo de console ou sempre que você quiser uma implementação mínima do Application Insights sem o conjunto completo de recursos, como métricas, rastreamento distribuído, amostragem e inicializadores de telemetria.
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));
}
Para obter mais informações, confira Qual tipo de telemetria do Application Insights é produzido a partir de logs do ILogger? Onde posso ver os logs do ILogger no Application Insights?.
Escopos de registro em log
ApplicationInsightsLoggingProvider
usa escopos de log. Os escopos são habilitados por padrão.
Se o escopo for do tipo IReadOnlyCollection<KeyValuePair<string,object>>
, cada par chave-valor na coleção será adicionado à telemetria do Application Insights como propriedades personalizadas. No exemplo a seguir, os logs são capturados como TraceTelemetry
e tem ("MyKey", "MyValue")
nas propriedades.
using (_logger.BeginScope(new Dictionary<string, object> { ["MyKey"] = "MyValue" }))
{
_logger.LogError("An example of an Error level message");
}
Se qualquer outro tipo for usado como escopo, ele será armazenado sob a propriedade Scope
na telemetria do Application Insights. No exemplo a seguir, TraceTelemetry
tem uma propriedade chamada Scope
que contém o escopo.
using (_logger.BeginScope("hello scope"))
{
_logger.LogError("An example of an Error level message");
}
Próximas etapas
- Para revisar perguntas frequentes (perguntas frequentes), consulte as Perguntas frequentes sobre o registro em log com .NET
- Valide se você está executando uma versão com suporte do SDK do Application Insights.
- Registro em log no .NET
- Registro em log no ASP.NET Core
- Logs de rastreamento do .NET no Application Insights