Compartir a través de


Proveedores de registro en .NET

Los proveedores de registro conservan los registros, excepto el proveedor de Console, que solo muestra los registros como salida estándar. Por ejemplo, el proveedor de Azure Application Insights almacena los registros en Azure Application Insights. Se pueden habilitar varios proveedores.

Las plantillas de aplicación de trabajo de .NET predeterminadas:

using Microsoft.Extensions.Hosting;

using IHost host = Host.CreateApplicationBuilder(args).Build();

// Application code should start here.

await host.RunAsync();

El código anterior muestra la clase Program creada con las plantillas de aplicación de trabajo de .NET. En las siguientes secciones se proporcionan ejemplos basados en las plantillas de aplicación de trabajo de .NET, que usan el host genérico.

Para invalidar el conjunto predeterminado de proveedores de registro agregados por Host.CreateApplicationBuilder, llame a ClearProviders y agregue los proveedores de registro que desee. Por ejemplo, el código siguiente:

HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);

builder.Logging.ClearProviders();
builder.Logging.AddConsole();

Para obtener más proveedores, consulte:

Configuración de un servicio que depende de ILogger

Para configurar un servicio que dependa de ILogger<T>, use la inserción de constructores o proporcione un método Factory. El enfoque del método de fábrica solo se recomienda si no hay ninguna otra opción. Por ejemplo, tomemos un servicio que necesita una instancia de ILogger<T> proporcionada por DI:

HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);

builder.Services.AddSingleton<IExampleService>(
    container => new DefaultExampleService
    {
        Logger = container.GetRequiredService<ILogger<IExampleService>>()
    });

El código anterior es un Func<IServiceProvider, IExampleService> que se ejecuta la primera vez que el contenedor de DI necesita construir una instancia de IExampleService. Puede acceder a cualquiera de los servicios registrados de esta manera.

Proveedores de registro integrados

Las extensiones de Microsoft incluyen los siguientes proveedores de registro como parte de las bibliotecas en tiempo de ejecución:

Microsoft envía los siguientes proveedores de registro, pero no como parte de las bibliotecas en tiempo de ejecución. Deben instalarse como paquetes NuGet adicionales.

Consola

El proveedor Console registra la salida en la consola.

Depurar

El proveedor Debug escribe la salida del registro con la clase System.Diagnostics.Debug, en particular, con el método Debug.WriteLine y solo cuando se adjunta el depurador. El DebugLoggerProvider crea instancias de una clase de registrador que implementa la interfaz ILogger.

Origen del evento

El proveedor EventSource escribe en un origen de eventos multiplataforma con el nombre Microsoft-Extensions-Logging. En Windows, el proveedor usa ETW.

herramienta de seguimiento de dotnet

La herramienta dotnet-trace es una herramienta global de la CLI multiplataforma que permite la recopilación de seguimientos de .NET Core de un proceso en ejecución. La herramienta recopila datos del proveedor Microsoft.Extensions.Logging.EventSource mediante un LoggingEventSource.

Consulte dotnet-trace para obtener instrucciones de instalación. Para ver un tutorial de diagnóstico con dotnet-trace, consulte Depuración del uso intensivo de la CPU en .NET Core.

Registro de eventos de Windows

El proveedor de EventLog envía el resultado del registro al registro de eventos de Windows. A diferencia de otros proveedores, el proveedor EventLogno hereda la configuración de no proveedor predeterminada. Si no se especifica la configuración de registro EventLog, se utilizará el valor predeterminado LogLevel.Warning.

Para registrar eventos inferiores a LogLevel.Warning, establezca explícitamente el nivel de registro. En el ejemplo siguiente se establece el nivel de registro predeterminado del registro de eventos en LogLevel.Information:

"Logging": {
  "EventLog": {
    "LogLevel": {
      "Default": "Information"
    }
  }
}

Las sobrecargas de AddEventLog pueden pasar EventLogSettings. Si no se especifica null, se usan las siguientes opciones de configuración predeterminadas:

  • LogName: "Aplicación"
  • SourceName: ".NET Runtime"
  • MachineName: se usa el nombre del equipo local.

El código siguiente cambia el SourceName del valor predeterminado de ".NET Runtime" a CustomLogs:

HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);

builder.Logging.AddEventLog(
    config => config.SourceName = "CustomLogs");

using IHost host = builder.Build();

host.Run();

Azure App Service

El paquete de proveedor Microsoft.Extensions.Logging.AzureAppServices escribe los registros en archivos de texto en el sistema de archivos de una aplicación de Azure App Service y en Blob Storage en una cuenta de Azure Storage.

El paquete de proveedor no está incluido en las bibliotecas de tiempo de ejecución. Para usar el proveedor, agregue el paquete de proveedor al proyecto.

Para configurar la configuración del proveedor, use AzureFileLoggerOptions y AzureBlobLoggerOptions, como se muestra en el ejemplo siguiente:

using Microsoft.Extensions.Logging.AzureAppServices;

HostApplicationBuilder builder = Host.CreateApplicationBuilder(args)

builder.Logging.AddAzureWebAppDiagnostics();
builder.Services.Configure<AzureFileLoggerOptions>(options =>
{
    options.FileName = "azure-diagnostics-";
    options.FileSizeLimit = 50 * 1024;
    options.RetainedFileCountLimit = 5;
});
builder.Services.Configure<AzureBlobLoggerOptions>(options =>
{
    options.BlobName = "log.txt";
});

using IHost host = builder.Build();

// Application code should start here.

await host.RunAsync();

Cuando se implementa en Azure App Service, la aplicación usa la configuración de la sección Registros de App Service de la página App Service de Azure Portal. Cuando se actualiza la siguiente configuración, los cambios surten efecto inmediatamente sin necesidad de reiniciar ni volver a implementar la aplicación.

La ubicación predeterminada de los archivos de registro está en la carpeta D:\home\LogFiles\Application. Los valores predeterminados adicionales varían según el proveedor:

  • Registro de Aplicaciones (Sistema de Archivos): El nombre de archivo predeterminado del sistema de archivos es diagnostics-yyyymmdd.txt. El límite de tamaño de archivo predeterminado es de 10 MB y el número máximo predeterminado de archivos retenidos es 2.
  • registro de aplicaciones (blob): el nombre del blob predeterminado es {nombre-aplicación}/aaaa/mm/dd/hh/{guid}_applicationLog.txt.

Este proveedor solo registra cuando el proyecto se ejecuta en el entorno de Azure.

Streaming de registros de Azure

El streaming de registros de Azure admite la visualización de la actividad de registro en tiempo real desde:

  • El servidor de aplicaciones
  • Servidor web
  • Seguimiento de solicitudes con error

Para configurar el streaming de registros de Azure:

  • Desplácese a la página Registros de App Service desde la página del portal de la aplicación.
  • Establezca Registro de la aplicación (sistema de archivos) en Activado.
  • Elija el Nivel de registro. Esta configuración solo se aplica al streaming de registros de Azure.

Vaya a la página flujo de registro para ver los registros. Los mensajes registrados se registran con la interfaz ILogger.

Azure Application Insights

El paquete de proveedor Microsoft.Extensions.Logging.ApplicationInsights escribe los registros en Azure Application Insights. Application Insights es un servicio que supervisa una aplicación web y proporciona herramientas para consultar y analizar los datos de telemetría. Si usa este proveedor, puede consultar y analizar los registros mediante las herramientas de Application Insights.

Para obtener más información, consulte los siguientes recursos:

Consideraciones de diseño del proveedor de registro

Si tiene previsto desarrollar su propia implementación de la interfaz de ILoggerProvider y la implementación personalizada correspondiente de ILogger, tenga en cuenta los siguientes puntos:

  • El método ILogger.Log es sincrónico.
  • La duración de los objetos y el estado de registro no debe darse por sentada.

Una implementación de ILoggerProvider creará un ILogger a través de su método ILoggerProvider.CreateLogger. Si la implementación se esfuerza por poner en cola los mensajes de registro sin bloqueo, primero se deben materializar los mensajes o se debe serializar el estado del objeto que se usa para materializar una entrada de registro. Al hacerlo, se evitan posibles excepciones de objetos eliminados.

Para obtener más información, consulte Implementación de un proveedor de registro personalizado en .NET.

Proveedores de registro de terceros

Estos son algunos marcos de registro de terceros que funcionan con varias cargas de trabajo de .NET:

Algunas plataformas de terceros pueden realizar registro semántico, también conocido como registro estructurado.

El uso de un marco de terceros es similar al uso de uno de los proveedores integrados:

  1. Agregue un paquete NuGet al proyecto.
  2. Llame a un método de extensión ILoggerFactory o ILoggingBuilder proporcionado por la plataforma de registro.

Para obtener más información, consulte la documentación de cada proveedor. Microsoft no admite proveedores de registro de terceros.

Consulte también