Información general sobre el registro y la interceptación

Entity Framework Core (EF Core) contiene varios mecanismos para generar registros, responder a eventos y obtener diagnósticos. Cada uno de ellos se adapta a diferentes situaciones, y es importante seleccionar el mecanismo adecuado para cada tarea, incluso cuando puedan funcionar varios. Por ejemplo, un interceptor de base de datos se podría usar para registrar SQL, pero sería más adecuado usar en este caso alguno de los mecanismos adaptados al registro. En esta página, se presenta información general de cada uno de estos mecanismos y se describe en qué casos se debe usar cada uno de ellos.

Referencia rápida

En la siguiente tabla se proporciona una referencia rápida para las diferencias entre los mecanismos descritos aquí.

Mechanism Async Ámbito Registered Uso previsto
Registro sencillo No Por contexto Configuración en contexto Registro del tiempo de desarrollo
Microsoft.Extensions.Logging No Por contexto* D.I. o configuración en contexto Registro de producción
Eventos No Por contexto Cualquier momento Reacción a eventos de EF
Interceptores Por contexto Configuración en contexto Manipulación de operaciones EF
Escuchas de diagnóstico No Proceso Globalmente Diagnósticos de aplicaciones

*Normalmente, Microsoft.Extensions.Logging se configura individualmente en cada aplicación mediante la inserción de dependencias. Sin embargo, en el nivel de EF, cada contexto se puede configurar con un registrador diferente en caso necesario.

Registro sencillo

Se puede acceder a los registros de EF Core desde cualquier tipo de aplicación mediante el uso de LogTo al configurar una instancia de DbContext. Esta configuración se realiza normalmente en una invalidación de DbContext.OnConfiguring. Por ejemplo:

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

Este concepto es similar a Database.Log en EF6.

Vea Registro simple para más información.

Microsoft.Extensions.Logging

Microsoft.Extensions.Logging es un mecanismo de registro extensible con proveedores de complementos para muchos sistemas de registro comunes. EF Core se integra totalmente con Microsoft.Extensions.Logging y esta forma de registro se usa de forma predeterminada para las aplicaciones ASP.NET Core.

Consulte Usar Microsoft.Extensions.Logging en EF Core para obtener más información.

Eventos

EF Core expone eventos de .NET para que actúen como devoluciones de llamada cuando ocurran ciertas cosas en el código EF Core. Los eventos son más sencillos que los interceptores y permiten un registro más flexible. Sin embargo, solo son sincrónicos y, por tanto, no pueden realizar operaciones de E/S asincrónicas sin bloqueo.

Los eventos se registran por instancia de DbContext y este registro se puede realizar en cualquier momento. Use una escucha de diagnóstico para obtener la misma información, pero para todas las instancias de DbContext del proceso.

Consulte Eventos de .NET en EF Core para obtener más información.

Interception

Los interceptores de EF Core habilitan la intercepción, la modificación o la supresión de operaciones de EF Core. Esto incluye operaciones de base de datos de bajo nivel tales como ejecutar un comando, así como operaciones de nivel superior tales como llamadas a SaveChanges.

Los interceptores son distintos del registro y el diagnóstico en que permiten la modificación o supresión de la operación que se intercepta. El registro sencillo o Microsoft.Extensions.Logging son mejores opciones de registro.

Los interceptores se registran por instancia de DbContext al configurarse el contexto. Use una escucha de diagnóstico para obtener la misma información, pero para todas las instancias de DbContext del proceso.

Consulte Interceptación para obtener más información.

Escuchas de diagnóstico

Las escuchas de diagnóstico permiten escuchar cualquier evento de EF Core que se produzca en el proceso de .NET actual.

Las escuchas de diagnóstico no son adecuadas para obtener eventos de una sola instancia de DbContext. Los interceptores de EF Core proporcionan acceso a los mismos eventos con el registro por contexto.

Las escuchas de diagnóstico no están diseñadas para el registro. El registro sencillo o Microsoft.Extensions.Logging son mejores opciones de registro.

Consulte el artículo sobre cómo Usar escuchas de diagnóstico en EF Core para obtener más información.