ASP.NET CORE Serilog SqlServer Loglama

Serilog, .NET için tasarlanmış popüler ve güçlü bir logging kütüphanesidir. Uygulamalarınızda olay kayıtlarını (logları) kolay ve esnek bir şekilde oluşturmanıza, yönetmenize ve depolamanıza olanak tanır. Yapılandırılabilir ve genişletilebilir bir mimarisi vardır, bu sayede log kayıtlarınızı çeşitli çıktı noktalarına (console, dosya, veritabanı, ElasticSearch, Seq gibi) gönderebilir ve ayrıca log mesajlarınızın içerisindeki yapılandırılmış verilere dayalı olarak daha detaylı sorgulamalar yapabilirsiniz.

Serilog’ün en önemli özelliklerinden biri, “yapılandırılmış logging” (structured logging) imkanı sunmasıdır. Yapılandırılmış logging ile log mesajlarınızı sadece metinsel olarak değil, aynı zamanda veri olarak da kaydedebilirsiniz. Örneğin, bir kullanıcının oturum açma işlemi loglandığında, kullanıcı adı ve zaman damgası gibi bilgiler de kaydedilerek daha sonra bu bilgilere göre filtreleme veya sorgulama yapılabilir.

Serilog’un kullanımı genellikle aşağıdaki adımları içerir:

  1. Kurulum ve Yapılandırma: Serilog, NuGet üzerinden projenize eklenir ve genellikle uygulamanın başlatılması esnasında (örneğin ASP.NET Core’da Startup.cs veya Program.cs içerisinde) yapılandırılır.
  2. Logging Sinks: Serilog “sink” kavramını kullanır, bu kavram logların gönderileceği hedefi ifade eder. Örneğin, bir dosyaya, konsola veya uzaktaki bir log sunucusuna log göndermek için farklı sinkler kullanılır.
  3. Log Oluşturma: Uygulamanızın çeşitli noktalarında, Serilog API’sini kullanarak log mesajları oluşturabilirsiniz. Bu mesajlar hata ayıklama, bilgi, uyarı, hata ve kritik seviyelerde olabilir.
  4. Yapılandırılmış Veri: Log mesajlarınızın içerisine, log ile ilgili ek veriler ekleyebilirsiniz. Bu, özellikle büyük ve karmaşık uygulamalarda, olayların daha sonra analiz edilmesi açısından büyük kolaylık sağlar.
  5. Log Yönetimi: Logların düzgün bir şekilde döndürülmesi (log rotation), arşivlenmesi ve eski logların temizlenmesi gibi işlemler Serilog veya ekstra tool’lar ile yönetilebilir.

Serilog, loglamayı modern bir yaklaşımla ele alır ve .NET geliştiricilerinin ihtiyaç duyduğu performans ve esnekliği sağlar. Yapılandırılmış loglamayı desteklemesi ve güçlü sink ekosistemi ile Serilog, .NET ekosistemi içinde çok tercih edilen bir logging çözümüdür.


Şimdi Başlıyoruz.
Aşağıdaki 3 .net kütüphanesini kurun.

Serilog.AspNetCore
Serilog.Settings.Configuration
Serilog.Sinks.MSSqlServer
C#

Ardından Program.cs dosyasına aşağıdaki kodları ekleyin.

var sconfig  = new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
        .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", optional: true)
        .Build();

Log.Logger = new LoggerConfiguration()
          .ReadFrom.Configuration(sconfig)
          .CreateLogger();
      
      
        /// kodlar
          
app.UseSerilogRequestLogging(options =>
{
    options.MessageTemplate = "{RemoteIpAddress} {RequestScheme} {RequestHost} {RequestMethod} {RequestPath} responded {StatusCode} in {Elapsed:0.0000} ms";
    options.GetLevel = (httpContext, elapsed, ex) => LogEventLevel.Debug;
    options.EnrichDiagnosticContext = (diagnosticContext, httpContext) =>
    {
        diagnosticContext.Set("RequestHost", httpContext.Request.Host.Value);
        diagnosticContext.Set("RequestScheme", httpContext.Request.Scheme);
        diagnosticContext.Set("RemoteIpAddress", httpContext.Connection.RemoteIpAddress);
    };
});
//Bu bölüm, her bir HTTP isteğinin loglanması için Serilog’un yapılandırılmasını içerir. Log mesajlarını özelleştirmek, log seviyelerini belirlemek ve ekstra bilgileri diagnostic context'e eklemek için kullanılır.
C#

SqlServer‘da tablomuzu oluşturalım.

CREATE TABLE [Log] (

   [Id] int IDENTITY(1,1) NOT NULL,
   [Message] nvarchar(max) NULL,
   [MessageTemplate] nvarchar(max) NULL,
   [Level] nvarchar(128) NULL,
   [TimeStamp] datetimeoffset(7) NOT NULL,
   [Exception] nvarchar(max) NULL,
   [Properties] xml NULL,
   [LogEvent] nvarchar(max) NULL

   CONSTRAINT [PK_Log]
     PRIMARY KEY CLUSTERED ([Id] ASC)

)
SQL

SqlServer’da log kayıtlarımıza bakıyoruz.

ASP.NET CORE Serilog SqlServer Loglama
ASP.NET CORE Serilog SqlServer Loglama

Günlüğün SQL Server’a yazılmasında sorun yaşarsak, Serilog’daki hataları ortaya çıkarmak için Program.cs içindeki Serilog.Debugging.SelfLog.Enable() işlevini kullanabileceğimizi unutmayın.

 Serilog.Debugging.SelfLog.Enable(msg =>
        {
            Debug.Print(msg);
            Debugger.Break();
        });
C#

Konumuzun sonuna geldik Eğer dilerseniz GITHUB PROJE ‘sinden kodların tamamına ulaşabilirsiniz. İyi Kodlamalar…

One Comment

Bir yanıt yazın