Registrando em logLogging

Dica

Você pode exibir este artigo exemplo no GitHub.You can view this article's sample on GitHub.

Aplicativos do ASP.NET CoreASP.NET Core applications

EF Core integra-se automaticamente com o mechanims de registro do ASP.NET Core sempre que AddDbContext ou AddDbContextPool é usado.EF Core integrates automatically with the logging mechanims of ASP.NET Core whenever AddDbContext or AddDbContextPool is used. Portanto, ao usar o ASP.NET Core, o log deve ser configurado conforme descrito no 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

Núcleo EF log atualmente 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 log 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 deve ser registrada com núcleo EF 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 os aplicativos não criar uma nova instância de ILoggerFactory para cada instância do 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 um baixo desempenho.Doing so will result in a memory leak and poor performance.

Filtragem que é registrado em logFiltering 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 somente 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
  • o nível 'Informações'at the 'Information' level

Para EF Core, categorias de agente de log são definidas no DbLoggerCategory classe para tornar mais fácil encontrar categorias, mas eles resolver em 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.

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