Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo obtendrá información sobre cómo capturar registros con Application Insights en aplicaciones de .NET usando el paquete de proveedor de Microsoft.Extensions.Logging.ApplicationInsights
. Si usa este proveedor, puede consultar y analizar los registros mediante las herramientas de Application Insights.
Precaución
Recomendamos la Distribución de OpenTelemetry de Azure Monitor para que las nuevas aplicaciones o clientes alimenten Azure Monitor Application Insights. La Distribución de OpenTelemetry de Azure Monitor ofrece una funcionalidad y experiencia similares al SDK de Application Insights. Es posible migrar desde el SDK de Application Insights usando las guías de migración para .NET, Node.js, y Python, pero todavía estamos trabajando para agregar unas pocas características más para la compatibilidad con versiones anteriores.
Sugerencia
- De forma predeterminada, el proveedor de Application Insights solo envía registros con una gravedad de
Warning
o superior. Para incluirInformation
o registros de nivel inferior, actualice la configuración del nivel de registro enappsettings.json
. - Si desea implementar la gama completa de telemetría de Application Insights junto con el registro, consulte Configuración de Application Insights para los sitios web de ASP.NET o Application Insights para aplicaciones ASP.NET Core.
- El
Microsoft.ApplicationInsights.WorkerService
paquete NuGet, que se usa para habilitar Application Insights para servicios en segundo plano, está fuera del ámbito. Para más información, consulte Application Insights para aplicaciones de Worker Service.
Aplicaciones de ASP.NET Core
Para agregar el registro de Application Insights a las aplicaciones ASP.NET Core:
Instale los
Microsoft.Extensions.Logging.ApplicationInsights
.Agregue
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();
Con el paquete NuGet instalado y el proveedor registrado mediante inyección de dependencias, la aplicación está lista para registrar eventos. Con la inserción de constructores, se necesita ILogger o la alternativa de tipo genérico ILogger<TCategoryName>. Cuando se resuelvan estas implementaciones, ApplicationInsightsLoggerProvider
las proporcionará. Las excepciones o los mensajes registrados se enviarán a Application Insights.
Considere el siguiente controlador de ejemplo:
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 más información, consulte Registro en ASP.NET Core y ¿Qué tipo de telemetría de Application Insights se genera a partir de registros de ILogger? ¿Dónde puedo ver los registros de ILogger en Application Insights?.
Aplicación de consola
Para agregar el registro de Application Insights a las aplicaciones de la consola, primero instala los siguientes paquetes de NuGet:
En el ejemplo siguiente se usa el paquete Microsoft.Extensions.Logging.ApplicationInsights y se muestra el comportamiento predeterminado para una aplicación de consola. El paquete Microsoft.Extensions.Logging.ApplicationInsights debe usarse en una aplicación de consola o siempre que desee una implementación mínima de Application Insights sin el conjunto de características completo, como métricas, seguimiento distribuido, muestreo e inicializadores de telemetría.
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 más información, consulte ¿Qué tipo de telemetría de Application Insights se genera a partir de registros de ILogger? ¿Dónde puedo ver los registros de ILogger en Application Insights?
Ámbitos de registro
ApplicationInsightsLoggingProvider
admite ámbitos de registro. Los ámbitos están habilitados de manera predeterminada.
Si el ámbito es de tipo IReadOnlyCollection<KeyValuePair<string,object>>
, todos los pares clave-valor de la colección se agregan a los datos de telemetría de Application Insights como propiedades personalizadas. En el siguiente ejemplo, los registros se capturan como TraceTelemetry
y tienen ("MyKey", "MyValue")
en las propiedades.
using (_logger.BeginScope(new Dictionary<string, object> { ["MyKey"] = "MyValue" }))
{
_logger.LogError("An example of an Error level message");
}
Si se usa cualquier otro tipo como ámbito, se almacena en la propiedad Scope
en la telemetría de Application Insights. En el siguiente ejemplo, TraceTelemetry
tiene una propiedad denominada Scope
que contiene el ámbito.
using (_logger.BeginScope("hello scope"))
{
_logger.LogError("An example of an Error level message");
}
Pasos siguientes
- Para revisar las preguntas más frecuentes (FAQ), consulte Preguntas frecuentes sobre registro con .NET.
- Valide que está ejecutando una versión compatible del SDK de Application Insights.
- Registro en .NET
- Registro en ASP.NET Core
- Registros de seguimiento de .NET en Application Insights