Serilog , .NET uygulamaları için en popüler Log kitaplıklarından(libraries) birisidir. Kurulumu kolaydır ve çok sayıda güçlü özellik sunar. Yazılım geliştiricilerin özelleştirilmiş kodlarını buna eklemelerine ve bu kitaplığın işlevselliğini daha da genişletmelerine olanak tanıyan birçok uzantı noktasına sahiptir. Bu makale sonunda, metin tabanlı Log dosyalarına nasıl mesaj kaydedebileceğinizi göstereceğim.
Serilog nedir?
Yazılım uygulamalarının en can alıcı noktalarından biri işleyişteki her bir adımı raporlayıp kayıt altına alan log mekanizmalarıdır diyebiliriz. Serilog , uygulamanıza bazı harika tanılama özellikleri eklemek için kullanılabilecek .NET uygulamaları için yapısal bir log kitaplığıdır(library).
Yazılım geliştiricilerin dosyalara, consola, veri tabanlarına ve mesaj kuyruklarına dahil olmak üzere yüzlerce farklı hedefe mesajlarını kaydetmelerine olanak tanır.
Structured Logging
Structured Loggin(Yapılandırılmış günlük kaydı), uygulama logları için metin yerine veri kümeleri olarak ele alınmalarına olanak tanıyan tutarlı, önceden belirlenmiş bir mesaj biçimi uygulama pratiğidir.
Serilog Seviyeleri
Serilog.Sinks.Console — Standart çıktı yoluyla Windows consolu’na yazmak için
Serilog.Sinks.File — Bir veya daha fazla metin dosyasına yazmak için
Serilog.Sinks.Email — SMTP e-postası ile göndermek için
Serilog.Sinks.MSSqlServer — Microsoft SQL Server’a yazmak için
Şimdi ASP.NET Core MVC projesi oluşturup onun üzerinden işlemlerimizi yapmaya geçelim. Bu proje üzerinde örnek olması açısında 0'a bölme hatası alıp bu hatayı loglayalım.
Projemizde bir “Services” klasörü oluşturarak başlayalım ve ardından aşağıdaki IMathService interfacesini Services klasörüne ekleyelim.
Daha sonra, aynı Services klasörüne bir MatchService sınıfı ekleyip bu sınıfa IMathService interfacesini uygulayalım.
Daha sonra, servis sınıfımızı .NET Core DI Container kullanarak register edelim.
ve son olarak, HomeController’ıma IMathService ve ILogger’ı enjekte ediyorum ve Divide methoduna iki ondalık parametre gönderiyorum.
Herhangi bir ondalık sayıyı 0'a bölemeyeceğimiz için, oluşturulan hata mesajının log’a kaydedildiğini aşağıdaki çıktıyla görebiliyoruz.
ASP.NET Core Uygulamasına Serilog Entegrasyonu
Visual Studio’da bulunan NuGet Paket Yöneticisi’ni kullanarak aşağıda ki paketleri indirip kuralım.
Şimdi yapmanız gereken ilk şey, .NET log kaydı yapılandırmasını appsettings.json dosyasından kaldırmaktır. Bunun nedeni, Serilog’un log kaydetmesini yapılandırmak için basit bir C# API kullanmasıdır. Serilog’u yapılandırmak için yine de harici bir appsettings.json dosyası kullanmak istiyorsanız, Serilog.Settings.AppSettings (.NET Framework) veya Serilog.Settings.Configuration (.NET Core) paketlerini indirip kullanmamız gerekir.
Sonra LoggerConfiguration sınıfını kullanarak bir Serilog logger oluşturmamız gerekiyor ve bunu yapmanın en kolay yolu Serilog’un global, statik olarak erişilebilir logger’ını kullanmaktır. Program.cs sınıfını açıp aşağıdaki kod parçacığında gösterildiği gibi yapılandıralım.
Projeyi şimdi çalıştırıp, debug ekranın da aşağıdaki log mesajlarını görelim.
Log mesajlarını JSON formatında kaydetme
Serilog.Formatting.Compact paketini projemize ekledikten sonra log mesajlarını JSON biçiminde yazmak için, aşağıdaki kod parçacığında gösterildiği gibi yapılandırma methoduna bir CompactJsonFormatter veya RenderedCompactJsonFormatter iletelim.
Şimdi projeyi tekrar çalıştırıp log mesajlarının veya istisnaların hepsinin JSON formatında kaydedildiğini görelim.