Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Entity Framework Core (EF Core) содержит несколько механизмов создания журналов, реагирования на события и получения диагностики. Каждое из них предназначено для разных ситуаций, и важно выбрать лучший механизм для выполнения задачи, даже если несколько механизмов могут работать. Например, перехватчик базы данных можно использовать для регистрации SQL, но это лучше обрабатывается одним из механизмов, адаптированных к ведению журнала. На этой странице представлен обзор каждого из этих механизмов и описывается, когда следует использовать каждый из них.
Краткий справочник
В приведенной ниже таблице приведен краткий справочник по различиям между механизмами, описанными здесь.
| Механизм | Асинхронный режим | Объем | Зарегистрирован | Предполагаемое использование |
|---|---|---|---|---|
| Простое логирование | Нет | По контексту | Конфигурация контекста | Ведение журнала во время разработки |
| Microsoft.Extensions.Logging | Нет | Для каждого контекста* | Конфигурация D.I. или контекста | Журналирование в производственной среде |
| События | Нет | Для каждого контекста | Любое время | Реагирование на события EF |
| Перехватчики | Да | Для каждого контекста | Конфигурация контекста | Управление операциями EF |
| Прослушиватели диагностики | Нет | Процедура | Глобально | Диагностика приложений |
*Обычно Microsoft.Extensions.Logging настраивается для каждого приложения с помощью внедрения зависимостей. Однако на уровне EF каждый контекст можно настроить с помощью другого средства ведения журнала при необходимости.
Простое ведение журнала
Журналы EF Core можно получить из любого типа приложения с помощью использования LogTo при настройке экземпляра DbContext. Конфигурация обычно осуществляется через переопределение DbContext.OnConfiguring. Рассмотрим пример.
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder.LogTo(Console.WriteLine);
Эта концепция похожа на Database.Log в EF6.
Дополнительные сведения см. в разделе "Простое ведение журнала ".
Microsoft.Extensions.Logging
Microsoft.Extensions.Logging — это расширяемый механизм ведения журнала с поставщиками подключаемых модулей для многих распространенных систем ведения журнала. EF Core полностью интегрируется с Microsoft.Extensions.Logging, и эта форма ведения журнала используется по умолчанию для приложений ASP.NET Core.
Дополнительные сведения см. в статье об использовании Microsoft.Extensions.Logging в EF Core .
События
EF Core предоставляет события .NET для использования в качестве обратных вызовов при выполнении определенных действий в коде EF Core. События проще перехватчиков и позволяют более гибкую регистрацию. Однако они только синхронные, и поэтому не могут выполнять асинхронные операции ввода-вывода.
События регистрируются для каждого экземпляра DbContext, и эта регистрация может выполняться в любое время. Используйте прослушиватель диагностики для получения той же информации, но для всех экземпляров DbContext, участвующих в процессе.
Дополнительные сведения см. в разделе событий .NET в EF Core .
Перехват
Перехватчики EF Core обеспечивают перехват, изменение и/или подавление операций EF Core. Это включает низкоуровневые операции базы данных, такие как выполнение команды, а также операции более высокого уровня, такие как вызовы SaveChanges.
Перехватчики отличаются от ведения журнала и диагностики тем, что они позволяют изменять либо подавлять перехватываемую операцию. Простое ведение журнала или Microsoft.Extensions.Logging лучше всего подходит для ведения журнала.
Перехватчики регистрируются для каждого экземпляра DbContext при настройке контекста. Используйте прослушиватель диагностики для получения той же информации, но для всех экземпляров DbContext, участвующих в процессе.
Дополнительные сведения см. в разделе «Перехват».
Прослушиватели диагностики
Диагностические слушатели позволяют отслеживать любые события EF Core, происходящие в текущем процессе .NET.
Прослушиватели диагностики не подходят для получения событий из одного экземпляра DbContext. Перехватчики EF Core предоставляют доступ к тем же событиям, регистрируясь в каждом контексте.
Диагностические слушатели не предназначены для логирования. Простое ведение журнала или Microsoft.Extensions.Logging лучше всего подходит для ведения журнала.
См. Использование диагностических прослушивателей в EF Core для получения дополнительной информации.