Gambaran Umum Pengelogan dan Intersepsi

Entity Framework Core (EF Core) berisi beberapa mekanisme untuk menghasilkan log, merespons peristiwa, dan mendapatkan diagnostik. Masing-masing disesuaikan dengan situasi yang berbeda, dan penting untuk memilih mekanisme terbaik untuk tugas di tangan, bahkan ketika beberapa mekanisme dapat berfungsi. Misalnya, interseptor database dapat digunakan untuk melog SQL, tetapi ini lebih baik ditangani oleh salah satu mekanisme yang dikhususkan untuk pencatatan log. Halaman ini menyajikan gambaran umum masing-masing mekanisme ini dan menjelaskan kapan masing-masing harus digunakan.

Referensi cepat

Tabel di bawah ini menyediakan referensi cepat untuk perbedaan antara mekanisme yang dijelaskan di sini.

Mekanisme Asinkron Ruang lingkup Terdaftar Penggunaan yang dimaksudkan
Pengelogan Sederhana No Per konteks Konfigurasi konteks Pencatatan log saat pengembangan
Microsoft.Extensions.Logging No Per konteks* D.I. atau konfigurasi konteks Pencatatan produksi
Events No Per konteks Kapan saja Bereaksi terhadap peristiwa EF
Interseptor Yes Per konteks Konfigurasi konteks Memanipulasi operasi EF
Pendengar diagnostik No Proses Global Diagnostik aplikasi

*Biasanya Microsoft.Extensions.Logging dikonfigurasi per aplikasi melalui injeksi dependensi. Namun, pada tingkat EF, setiap konteks dapat dikonfigurasi dengan pencatat yang berbeda jika diperlukan.

Pengelogan sederhana

Log EF Core dapat diakses dari semua jenis aplikasi melalui penggunaan LogTo saat mengonfigurasi instans DbContext. Konfigurasi ini biasanya dilakukan dalam override DbContext.OnConfiguring. Contohnya:

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

Konsep ini mirip Database.Log dengan di EF6.

Lihat Pencatatan Sederhana untuk informasi lebih lanjut.

Microsoft.Extensions.Logging

Microsoft.Extensions.Logging adalah mekanisme pengelogan yang dapat diperluas dengan penyedia plug-in untuk banyak sistem pengelogan umum. EF Core sepenuhnya terintegrasi dengan Microsoft.Extensions.Logging dan bentuk pengelogan ini digunakan secara default untuk aplikasi ASP.NET Core.

Lihat Menggunakan Microsoft.Extensions.Logging di EF Core untuk informasi selengkapnya.

Events

EF Core mengekspos peristiwa .NET untuk bertindak sebagai panggilan balik ketika hal-hal tertentu terjadi dalam kode EF Core. Acara lebih sederhana daripada interseptor dan memungkinkan registrasi yang lebih fleksibel. Namun, mereka hanya sinkron dan tidak dapat melakukan I/O asinkron yang tidak memblokir.

Peristiwa didaftarkan per instans DbContext dan pendaftaran ini dapat dilakukan kapan saja. Gunakan pendengar diagnostik untuk mendapatkan informasi yang sama tetapi untuk semua instance DbContext pada proses.

Lihat Peristiwa .NET di EF Core untuk informasi selengkapnya.

Penyadapan

Pencegat EF Core memungkinkan intersepsi, modifikasi, dan/atau penindasan operasi EF Core. Ini termasuk operasi database tingkat rendah seperti menjalankan perintah, serta operasi tingkat yang lebih tinggi, seperti panggilan ke SaveChanges.

Pencegat berbeda dari pencatatan dan diagnostik karena pencegat memungkinkan modifikasi atau penghentian operasi yang dicegat. Pengelogan sederhana atau Microsoft.Extensions.Logging adalah pilihan yang lebih baik untuk pengelogan.

Pencegat didaftarkan per instans DbContext saat konteks dikonfigurasi. Gunakan pendengar diagnostik untuk mendapatkan informasi yang sama tetapi untuk semua instance DbContext pada proses.

Lihat Intersepsi untuk informasi selengkapnya.

Pendengar diagnostik

Pendengar diagnostik memungkinkan mendengarkan peristiwa EF Core apa pun yang terjadi dalam proses .NET saat ini.

Pendengar diagnostik tidak cocok untuk menerima kejadian dari satu instance DbContext. Pencegat EF Core menyediakan akses ke peristiwa yang sama dengan registrasi per konteks.

Pendengar diagnostik tidak dirancang untuk pencatatan. Pengelogan sederhana atau Microsoft.Extensions.Logging adalah pilihan yang lebih baik untuk pengelogan.

Lihat Menggunakan pendengar diagnostik di EF Core untuk informasi selengkapnya.