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.
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.
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.
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.
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.
A fonte deste conteúdo pode ser encontrada no GitHub, onde você também pode criar e revisar problemas e solicitações de pull. Para obter mais informações, confira o nosso guia para colaboradores.
Comentários do .NET
O .NET é um projeto código aberto. Selecione um link para fornecer comentários:
Saiba como capturar a saída de rastreamento de seus aplicativos Web do Azure. Exiba um fluxo de log em tempo real e baixe arquivos de log para análise offline.