Günlüğe Kaydetme ve Önlemeye Genel Bakış

Entity Framework Core (EF Core), günlük oluşturmak, olaylara yanıt vermek ve tanılama almak için çeşitli mekanizmalar içerir. Bunların her biri farklı durumlara uyarlanmıştır ve birden çok mekanizmanın çalışabileceği durumlarda bile eldeki görev için en iyi mekanizmayı seçmek önemlidir. Örneğin, SQL'i günlüğe kaydetmek için bir veritabanı kesici kullanılabilir, ancak bu, günlüğe kaydetmeye uyarlanmış mekanizmalardan biri tarafından daha iyi işlenir. Bu sayfa, bu mekanizmaların her birine genel bir bakış sunar ve bunların ne zaman kullanılması gerektiğini açıklar.

Hızlı referans

Aşağıdaki tabloda, burada açıklanan mekanizmalar arasındaki farklar için hızlı bir başvuru sağlanır.

Mekanizma Async Scope Kayıtlı Kullanım amacı
Basit Kayıt Hayır Bağlam başına Bağlam Konfigürasyonu Geliştirme süreci günlüğü
Microsoft.Extensions.Logging Hayır Bağlam başına göre* D.I. veya bağlam yapılandırması Üretim kayıtları
Etkinlikler Hayır Her bağlama göre İstediğiniz zaman EF olaylarına tepki verme
Kesiciler Evet Bağlam başına Kapsam yapılandırması EF işlemlerini değiştirip yönetme
Tanılama dinleyicileri Hayır Süreç Genel Uygulama tanılamaları

*Genellikle Microsoft.Extensions.Logging bağımlılık ekleme yoluyla uygulama başına yapılandırılır. EF seviyesi düzeyinde, gerekirse her bir bağlam farklı bir loglama aracıyla yapılandırılabilir.

Basit günlük kaydı

EF Core günlüklerine, LogTo kullanımı aracılığıyla herhangi bir uygulama türünden erişilebilir. Bu yapılandırma genellikle bir geçersiz kılma işleminde DbContext.OnConfiguring yapılır. Örneğin:

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

Bu kavram EF6'dakine Database.Log benzer.

Daha fazla bilgi için bkz. Basit Loglama.

Microsoft.Extensions.Logging

Microsoft.Extensions.Logging , birçok yaygın günlük sistemi için eklenti sağlayıcılarıyla genişletilebilir bir günlük mekanizmasıdır. EF Core ile Microsoft.Extensions.Logging tamamen entegre olur ve bu günlük tutma biçimi, varsayılan olarak ASP.NET Core uygulamaları için kullanılır.

Daha fazla bilgi için bkz. EF Core'da Microsoft.Extensions.Logging kullanma .

Etkinlikler

EF Core, EF Core kodunda bazı şeyler gerçekleştiğinde geri çağırma görevi görmesi için .NET olaylarını kullanıma sunar. Olaylar, kesicilerden daha basittir ve daha esnek kayıt sağlar. Ancak, bunlar yalnızca senkron olduğundan bloklanmayan asenkron G/Ç gerçekleştiremez.

Olaylar DbContext örneği başına kaydedilir ve bu kayıt istediğiniz zaman yapılabilir. Aynı bilgileri almak için ancak işlemdeki tüm DbContext örnekleri için bir tanılama dinleyicisi kullanın.

Daha fazla bilgi için bkz. EF Core'da .NET Olayları .

Engelleme

EF Core yakalayıcıları, EF Core işlemlerinin kesilmesini, değiştirilmesini ve/veya bastırılmasını sağlar. Bu, komut yürütme gibi alt düzey veritabanı işlemlerinin yanı sıra SaveChanges çağrıları gibi daha üst düzey işlemleri içerir.

Yakalama araçları, durdurulan işlemi değiştirme veya engelleme izni verdiği için günlüğe kaydetme ve tanılama işlemlerinden farklıdır. Basit günlük kaydı veya Microsoft.Extensions.Logging , günlüğe kaydetme için daha iyi seçeneklerdir.

Bağlam yapılandırıldığında ara kesiciler her DbContext örneğine göre kaydedilir. Aynı bilgileri almak için ancak işlemdeki tüm DbContext örnekleri için bir tanılama dinleyicisi kullanın.

Daha fazla bilgi için bkz. Kesme noktası .

Tanılama dinleyicileri

Tanılama dinleyicileri, geçerli .NET işleminde gerçekleşen tüm EF Core olaylarını dinlemeye izin verir.

Tanılama dinleyicileri, tek bir DbContext örneğinden olayları dinlemek için uygun değildir. EF Core kesiciler, bağlam başına kayıt ile aynı olaylara erişim sağlar.

Tanılama dinleyicileri günlüğe kaydetme için tasarlanmamıştır. Basit günlük kaydı veya Microsoft.Extensions.Logging , günlüğe kaydetme için daha iyi seçeneklerdir.

Daha fazla bilgi için bkz. EF Core'da tanılama dinleyicilerini kullanma .