Visão geral de registro em log e interceptação

O Entity Framework Core (EF Core) contém vários mecanismos para gerar logs, responder a eventos e obter diagnósticos. Cada uma delas é adaptada a situações diferentes, e é importante selecionar o melhor mecanismo para a tarefa em mãos, mesmo quando vários mecanismos pudessem funcionar. Por exemplo, um interceptador de banco de dados poderia ser usado para registrar o SQL, mas isso é melhor tratado por um dos mecanismos adaptados ao registro em log. Esta página apresenta uma visão geral de cada um desses mecanismos e descreve quando cada um deve ser usado.

Referência rápida

A tabela a seguir fornece uma referência rápida para as diferenças entre os mecanismos descritos aqui.

Mecanismo Async Escopo Registrada Uso pretendido
Log simples Não Por contexto Configuração de contexto Log-tempo de desenvolvimento
Microsoft.Extensions.Logging Não Por contexto * D.I. ou configuração de contexto Log de produção
Eventos Não Por contexto Qualquer hora Reagindo a eventos do EF
Interceptadores Sim Por contexto Configuração de contexto Manipulando operações do EF
Ouvintes de diagnóstico Não Processo globalmente Diagnóstico de aplicativo
  • Normalmente Microsoft.Extensions.Logging é configurado por aplicativo por meio de injeção de dependência no entanto, no nível do EF, cada contexto pode ser configurado com um agente diferente, se necessário.

Registro em log simples

Observação

Esse recurso foi introduzido no EF Core 5,0.

EF Core logs podem ser acessados de qualquer tipo de aplicativo por meio do uso de LogTo ao Configurar uma instância de DbContext. Essa configuração é normalmente feita em uma substituição de DbContext.OnConfiguring . Por exemplo:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    => optionsBuilder.LogTo(Console.WriteLine);

Esse conceito é semelhante a Database.Log em EF6.

Consulte log simples para obter mais informações.

Microsoft.Extensions.Logging

O Microsoft. Extensions. Logging é um mecanismo de registro em log extensível com provedores de plug-in para muitos sistemas de registro em log comuns. EF Core integra-se totalmente com Microsoft.Extensions.Logging o e essa forma de registro em log é usada por padrão para ASP.NET Core aplicativos.

Consulte usando Microsoft. Extensions. Logging em EF Core para obter mais informações.

Eventos

Observação

Eventos adicionais foram introduzidos no EF Core 5,0.

EF Core expõe eventos .net para atuar como retornos de chamada quando determinadas coisas acontecem no código de EF Core. Os eventos são mais simples do que os interceptores e permitem um registro mais flexível. No entanto, eles são somente sincronização e, portanto, não podem executar e/s assíncrona sem bloqueio.

Os eventos são registrados por instância de DbContext e esse registro pode ser feito a qualquer momento. Use um ouvinte de diagnóstico para obter as mesmas informações, mas para todas as instâncias de DbContext no processo.

Consulte eventos .net no EF Core para obter mais informações.

Interceptação

Observação

Esse recurso foi introduzido no EF Core 3,0. Os interceptores adicionais foram introduzidos no EF Core 5,0.

EF Core interceptores habilitam a interceptação, modificação e/ou supressão de operações de EF Core. Isso inclui operações de banco de dados de nível baixo, como a execução de um comando, bem como operações de nível superior, como chamadas para SaveChanges.

Os interceptores são diferentes do registro em log e diagnósticos, pois permitem a modificação ou supressão da operação que está sendo interceptada. O log simples ou o Microsoft. Extensions. Logging são melhores opções para registro em log.

Os interceptores são registrados por instância de DbContext quando o contexto é configurado. Use um ouvinte de diagnóstico para obter as mesmas informações, mas para todas as instâncias de DbContext no processo.

Confira interceptação para obter mais informações.

Ouvintes de diagnóstico

Os ouvintes de diagnóstico permitem escutar qualquer evento de EF Core que ocorra no processo .NET atual.

Os ouvintes de diagnóstico não são adequados para obter eventos de uma única instância DbContext. EF Core interceptores fornecem acesso aos mesmos eventos com o registro por contexto.

Os ouvintes de diagnóstico não foram projetados para registro em log. O log simples ou o Microsoft. Extensions. Logging são melhores opções para registro em log.

Consulte usando ouvintes de diagnóstico no EF Core para obter mais informações.