Visão geral do registro em log e interceptação
O EF Core (Entity Framework Core) contém vários mecanismos para gerar logs, responder a eventos e obter diagnósticos. Cada um deles é adaptado a diferentes situações e é importante selecionar o melhor mecanismo para a tarefa em questão, mesmo quando vários mecanismos podem funcionar. Por exemplo, um interceptador de banco de dados pode ser usado para registrar o SQL em log, mas um dos mecanismos adaptados ao registro em log lida melhor com isso. 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 |
---|---|---|---|---|
Registro em log simples | Não | Por contexto | Configuração de contexto | Registro em tempo de desenvolvimento |
Microsoft.Extensions.Logging | Não | Por contexto* | D.I. ou configuração de contexto | Registro em log de produção |
Eventos | Não | Por contexto | Qualquer hora | Reação a eventos do EF |
Interceptores | Sim | Por contexto | Configuração de contexto | Manipulação de 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
Os registros em log do EF Core podem ser acessados de qualquer tipo de aplicativo por meio do uso de LogTo ao configurar uma instância de DbContext. Essa configuração geralmente é feita em uma substituição de DbContext.OnConfiguring. Por exemplo:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder.LogTo(Console.WriteLine);
Esse conceito é semelhante ao Database.Log do EF6.
Confira Registro em log simples para obter mais informações.
Microsoft.Extensions.Logging
Microsoft.Extensions.Logging é um mecanismo de registro em log extensível com provedores de plug-in para muitos sistemas de registro em log comuns. O EF Core integra-se totalmente com Microsoft.Extensions.Logging
e essa forma de log é usada por padrão para aplicativos ASP.NET Core.
Confira Uso de Microsoft.Extensions.Logging no EF Core para obter mais informações.
Eventos
O EF Core expõe eventos .NET para agir como retornos de chamada quando determinadas coisas acontecem no código EF Core. Os eventos são mais simples que os interceptadores e permitem um registro mais flexível. No entanto, eles são apenas sincronizados e, portanto, não podem executar E/S assíncrona sem bloqueio.
Os eventos são registrados por instância 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.
Confira Eventos .NET no EF Core para obter mais informações.
Interceptação
Os interceptadores do EF Core permitem interceptação, modificação e/ou supressão de operações do EF Core. Isso inclui operações de banco de dados de nível baixo, como executar 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óstico, pois permitem a modificação ou supressão da operação que está sendo interceptada. Registro em log simples ou 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 ouvir qualquer evento do 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 do DbContext. Os interceptadores do EF Core fornecem acesso aos mesmos eventos com registro por contexto.
Os ouvintes de diagnóstico não foram projetados para registro em log. Registro em log simples ou Microsoft.Extensions.Logging são melhores opções para registro em log.
Confira Usar ouvintes de diagnóstico no EF Core para obter mais informações.