Registrando em logLogging

Dica

Veja o exemplo deste artigo no GitHub.You can view this article's sample on GitHub.

Aplicativos ASP.NET CoreASP.NET Core applications

O EF Core integra-se automaticamente com os mecanismos de registro em log do ASP.NET Core sempre que AddDbContext ou AddDbContextPool é usado.EF Core integrates automatically with the logging mechanisms of ASP.NET Core whenever AddDbContext or AddDbContextPool is used. Portanto, ao usar o ASP.NET Core, registro em log deve ser configurado conforme descrito na documentação do ASP.NET Core.Therefore, when using ASP.NET Core, logging should be configured as described in the ASP.NET Core documentation.

Outros aplicativosOther applications

Registro em log no momento do EF Core requer um ILoggerFactory que também é configurado com um ou mais ILoggerProvider.EF Core logging currently requires an ILoggerFactory which is itself configured with one or more ILoggerProvider. Provedores comuns são fornecidos nos seguintes pacotes:Common providers are shipped in the following packages:

Depois de instalar o pacote apropriado (s), o aplicativo deve criar uma instância singleton/global de um LoggerFactory.After installing the appropriate package(s), the application should create a singleton/global instance of a LoggerFactory. Por exemplo, usando o agente de console:For example, using the console logger:

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

Esta instância singleton/global, em seguida, deve ser registrada com o EF Core no DbContextOptionsBuilder.This singleton/global instance should then be registered with EF Core on the DbContextOptionsBuilder. Por exemplo: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");

Aviso

É muito importante que aplicativos não criam uma nova instância de ILoggerFactory para cada instância de contexto.It is very important that applications do not create a new ILoggerFactory instance for each context instance. Isso resultará em um vazamento de memória e desempenho ruim.Doing so will result in a memory leak and poor performance.

O que é registrado de filtragemFiltering what is logged

É a maneira mais fácil para filtrar o que é registrado para configurá-lo ao registrar o ILoggerProvider.The easiest way to filter what is logged is to configure it when registering the ILoggerProvider. Por exemplo:For example:

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

Neste exemplo, o log é filtrado para retornar apenas as mensagens:In this example, the log is filtered to return only messages:

  • na categoria 'Microsoft.EntityFrameworkCore.Database.Command'in the 'Microsoft.EntityFrameworkCore.Database.Command' category
  • no nível de 'Informações'at the 'Information' level

Para o EF Core, as categorias de agente são definidas no DbLoggerCategory classe para torná-lo mais fácil encontrar categorias, mas elas resolvem para cadeias de caracteres 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.

Obter mais detalhes sobre a infraestrutura subjacente do registro em log podem ser encontrados na documentação de registro em log do ASP.NET Core.More details on the underlying logging infrastructure can be found in the ASP.NET Core logging documentation.