Proveedores de registro en .NET

Los proveedores de registro conservan los registros, excepto el proveedor 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 predeterminadas de .NET Worker:

using Microsoft.Extensions.Hosting;

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

// Application code should start here.

await host.RunAsync();

En el código anterior se muestra la clase Program creada con las plantillas de aplicación de .NET Worker. En las siguientes secciones se proporcionan ejemplos basados en las plantillas de aplicación de .NET Worker, 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 quiera. Por ejemplo, el código siguiente:

HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);

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

Para otros proveedores, vea:

Configuración de un servicio que dependa de ILogger

Para configurar un servicio que dependa de ILogger<T>, use la inserción de constructores o proporcione un método Factory. Usar un Factory Method es la opción recomendada si no se tiene otra alternativa. 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 elemento Func<IServiceProvider, IExampleService> que se ejecuta la primera vez que el contenedor de DI necesita crear una instancia de IExampleService. Puede acceder a cualquiera de los servicios registrados de esta forma.

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.

Depuración

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. DebugLoggerProvider crea instancias de DebugLogger, que son implementaciones de la interfaz ILogger.

Origen de eventos

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

herramienta de seguimiento de dotnet

La herramienta de seguimiento de dotnet es una herramienta global de 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.

Vea 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 EventLog envía la salida 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 especifican valores de registro de EventLog, el valor predeterminado será LogLevel.Warning.

Para registrar eventos inferiores a LogLevel.Warning, establezca el nivel de registro de forma explícita. 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 es null o no se especifica, se usa la siguiente configuración predeterminada:

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

En el código siguiente se cambia el valor predeterminado de SourceName (".NET Runtime") por 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 se incluye en las bibliotecas en tiempo de ejecución. Para usar el proveedor, agregue el paquete del proveedor al proyecto.

Para configurar las opciones de proveedor, use AzureFileLoggerOptions y AzureBlobLoggerOptions, tal y 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 configuración siguiente, los cambios se aplican de inmediato sin necesidad de reiniciar ni de volver a implementar la aplicación.

La ubicación predeterminada de los archivos de registro es la carpeta D:\home\LogFiles\Application. Los valores predeterminados varían en función del proveedor:

  • Registro de aplicaciones (Filesystem): el nombre de archivo predeterminado del sistema de archivos es diagnostics-yyyymmdd.txt. El límite de tamaño de archivo predeterminado es 10 MB, y el número máximo predeterminado de archivos que se conservan es 2.
  • Registro de aplicaciones (blob): el nombre de blob predeterminado es {app-name}/yyyy/mm/dd/hh/{guid}_applicationLog.txt.

El proveedor solo realiza registros cuando el proyecto se ejecuta en el entorno de Azure.

Secuencias de registro de Azure

El streaming de registro de Azure permite ver la actividad de registro en tiempo real desde:

  • El servidor de aplicaciones
  • El servidor web
  • Error del seguimiento de solicitudes

Para configurar las secuencias de registro 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 registro de Azure.

Desplácese a la página Secuencia de registro para ver los registros. Los mensajes que se registran lo hacen 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, vea los siguientes recursos:

Consideraciones de diseño del proveedor de registro

Si tiene previsto desarrollar su propia implementación de la interfaz 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á 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. De este modo, 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

Estas son algunas plataformas de registro de terceros que funcionan con las distintas cargas de trabajo de .NET:

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

El uso de una plataforma 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 más información, vea la documentación de cada proveedor. Microsoft no admite los proveedores de registro de terceros.

Vea también