Derinlemesine yazılım eğitimleri için kanalımı takip edebilirsiniz...

Entity Framework Core – Query Log

Merhaba,

Entity Framework Core mimarisinde yazılan LINQ sorguları neticesinde generate edilen sorguları izleyebilmek ve olası teknik hataları ayıklayabilmek amacıyla loglama mekanizmasını çalıştırmamız gerekebilmektedir. Bu ihtiyaca istinaden, .NET Core’da dahili olarak gelen log mekanizması Entity Framework Core ile entegre olabilmekte ve işlevselliğini gösterebilmektedir. Bizler bu içeriğimizde LINQ sorguları neticesinde oluşturulan sql query’lerinin nasıl loglanıp, izlenebileceğini ele alacak ve pratik olarak inceleyeceğiz.

İlk olarak LINQ sorguları neticesinde oluşturulacak sql sorgularını loglayacağımız platformu seçerek başlayalım. Bunun için şimdilik Console oldukça ideal olsa gerek. Haliyle ilgili projeye console’da loglama yapabilmek için Microsoft.Extensions.Logging.Console kütüphanesini yüklemeli ve altyapı olarak sürece hazır olmalıyız.

İlgili kütüphaneyi yükledikten sonra uygulamadaki DbContext ile log mekanizmasının nasıl entegre olduklarını ve işlevsellik gösterdiklerini aşağıdaki görsel üzerinden inceleyelim;
Entity Framework Core - Query Log
Görselden de anlaşılacağı üzere manuel oluşturulacak olan ILoggerFactory, DbContext nesnesi ile ilişkilendirilmektedir. ILoggerFactory ise akabinde yukarıda yüklediğimiz console uygulamasının paketini kullanarak(keza kullanılan platform her ne ise onunda paketi olabilir) işlevini gerçekleştirmektedir.

Misal, aşağıdaki örnek DbContext’i inceleyebilirsiniz;

    public class CompanyContext : DbContext
    {
        public DbSet<Employee> Employees { get; set; }
        public DbSet<Sale> Sales { get; set; }

        public static readonly ILoggerFactory loggerFactory = LoggerFactory.Create(builder => builder.AddConsole());
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer("Server=.;Database=CompanyDb;Trusted_Connection=True;")
                          .UseLoggerFactory(loggerFactory);
            base.OnConfiguring(optionsBuilder);
        }
    }

6. satırda static olarak oluşturulan ILoggerFactory nesnesi, 10. satırda ‘UseLoggerFactory’ metoduna verilerek bu DbContext ile ilişkilendirilmekte ve uygulamada bu context üzerinden generate edilecek tüm query’ler loglanmaya hazır hale getirilmektedir.

Buyrun deneyelim…

Select Query Insert Query
Entity Framework Core - Query Log Entity Framework Core - Query Log

Evet… Görüldüğü üzere sorgularımız başarıyla loglanmaktadır…

Filtreleme

Yukarıdaki örneklerde görüldüğü üzere oluşturulan sorgulara dair tüm bilgiler loglanmaktadır. Bu bazen tercih etmek istemeyeceğimiz bir durum olabilir ve loglanacak verileri belli kıstaslarla filtrelemek ihtiyacı duyabiliriz.

Misal;

.
.
.
        public static readonly ILoggerFactory loggerFactory = LoggerFactory.Create(builder => builder
        .AddFilter((category, level) => 
            category == DbLoggerCategory.Database.Command.Name 
             && 
            level == LogLevel.Information)
        .AddConsole());
.
.
.

Yukarıdaki örnekte olduğu gibi ‘AddFilter’ fonksiyonu ile log seviyesi ve category değerleri şarta bağlı bir şekilde filtrelenebilir. Böylece log datası istenildiği gibi özelleştirilebilmektedir.

İşte bu kadar 🙂 Okuduğunuz için teşekkür ederim.

İlgilenenlerin faydalanması dileğiyle…
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

1 Cevap

  1. 02 Aralık 2020

    […] önceki Entity Framework Core – Query Log başlığıyla kaleme aldığımız makalemizde Entity Framework Core ile oluşturulan sorguların […]

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*