RegistroLogging

Sugerencia

Puede ver un ejemplo de este artículo en GitHub.You can view this article's sample on GitHub.

Aplicaciones ASP.NET CoreASP.NET Core applications

EF Core se integra automáticamente con los mecanismos de registro de ASP.NET Core siempre que AddDbContext o AddDbContextPool se utiliza.EF Core integrates automatically with the logging mechanisms of ASP.NET Core whenever AddDbContext or AddDbContextPool is used. Por lo tanto, cuando se usa ASP.NET Core, el registro debe configurarse como se describe en el documentación de ASP.NET Core.Therefore, when using ASP.NET Core, logging should be configured as described in the ASP.NET Core documentation.

Otras aplicacionesOther applications

EF Core actualmente registro requiere un elemento ILoggerFactory que se configura con uno o más ILoggerProvider.EF Core logging currently requires an ILoggerFactory which is itself configured with one or more ILoggerProvider. Proveedores comunes se incluyen en los siguientes paquetes:Common providers are shipped in the following packages:

Nota

El siguiente código de ejemplo se usa un ConsoleLoggerProvider constructor que ha sido obsoleto en la versión 2.2.The following code sample uses a ConsoleLoggerProvider constructor that has been obsoleted in version 2.2. Reemplazos adecuados para la API de registro obsoleta estará disponibles en la versión 3.0.Proper replacements for obsolete logging APIs will be available in version 3.0. Mientras tanto, es seguro pasar por alto y suprimir las advertencias.In the meantime, it is safe to ignore and suppress the warnings.

Después de instalar los paquetes adecuados, la aplicación debe crear una instancia de un LoggerFactory singleton o global.After installing the appropriate package(s), the application should create a singleton/global instance of a LoggerFactory. Por ejemplo, mediante el registrador de consola:For example, using the console logger:

public static readonly LoggerFactory MyLoggerFactory
    = new LoggerFactory(new[] {new ConsoleLoggerProvider((_, __) => true, true)});

Esta instancia de singleton o global, a continuación, se debe registrar con EF Core en el DbContextOptionsBuilder.This singleton/global instance should then be registered with EF Core on the DbContextOptionsBuilder. Por ejemplo:For example:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    => optionsBuilder
        .UseLoggerFactory(MyLoggerFactory) // Warning: Do not create a new ILoggerFactory instance each time
        .UseSqlServer(
            @"Server=(localdb)\mssqllocaldb;Database=EFLogging;Trusted_Connection=True;ConnectRetryCount=0");

Advertencia

Es muy importante que las aplicaciones no crean una nueva instancia de ILoggerFactory para cada instancia del contexto.It is very important that applications do not create a new ILoggerFactory instance for each context instance. Si lo hace, dará como resultado una pérdida de memoria y un rendimiento deficiente.Doing so will result in a memory leak and poor performance.

Lo que se registra el filtradoFiltering what is logged

Nota

El siguiente código de ejemplo se usa un ConsoleLoggerProvider constructor que ha sido obsoleto en la versión 2.2.The following code sample uses a ConsoleLoggerProvider constructor that has been obsoleted in version 2.2. Reemplazos adecuados para la API de registro obsoleta estará disponibles en la versión 3.0.Proper replacements for obsolete logging APIs will be available in version 3.0. Mientras tanto, es seguro pasar por alto y suprimir las advertencias.In the meantime, it is safe to ignore and suppress the warnings.

Filtrar lo que se registra la manera más fácil es configurarlo al registrar el ILoggerProvider.The easiest way to filter what is logged is to configure it when registering the ILoggerProvider. Por ejemplo:For example:

public static readonly LoggerFactory MyLoggerFactory
    = new LoggerFactory(new[]
    {
        new ConsoleLoggerProvider((category, level)
            => category == DbLoggerCategory.Database.Command.Name
               && level == LogLevel.Information, true)
    });

En este ejemplo, el registro se puede filtrar para devolver sólo los mensajes:In this example, the log is filtered to return only messages:

  • en la categoría 'Microsoft.EntityFrameworkCore.Database.Command'in the 'Microsoft.EntityFrameworkCore.Database.Command' category
  • en el nivel "Información"at the 'Information' level

Para EF Core, se definen las categorías de registrador en el DbLoggerCategory clase para que sea más fácil encontrar las categorías, pero estos resolver como cadenas simples.For EF Core, logger categories are defined in the DbLoggerCategory class to make it easy to find categories, but these resolve to simple strings.

Encontrará más detalles sobre la infraestructura subyacente de registro en el documentación de registro de ASP.NET Core.More details on the underlying logging infrastructure can be found in the ASP.NET Core logging documentation.