Bir uygulamanın çalışma süreci boyunca sistemler ya da geliştiriciler tarafından üretilen çıktılara (örn: bilgi/uyarı/hata kayıtlarına) log (kütük) kayıtları denir.
Bu kayıtlar sistem yöneticilerinin sistem ya da kullanıcı aktiviteleri ile ilgili detaylı kayıtlara sahip olmasını ve olası bir problem durumunda kayıtların kullanılarak sorunun çok daha kısa sürede çözümüne/sorumlusunun tespitine fayda sağlamaktadır.
Log kayıtları bize uygulamamız hakkında sağlık/performans bilgilerinin yanı sıra kullanıcı eylemleri ile ilgilide bilgi verebilir. Log kayıtları sadece şu amaçla kullanılır gibi bir durum söz konusu değildir. İstediğiniz her şey için log kaydı oluşturabilir ve bu kayıtları daha sonra yorumlayarak/görselleştirerek anlaşılabilir veriler haline getirebilirsiniz. Hatta log kayıtlarına bağlı alarmlar (kesinlikle!) oluşturabilir ve olası sorunlar meydana gelmeden bu kayıtlar aracılığıyla önlemler/aksiyonlar alabilirsiniz.
Log kayıtları genellikle [ZAMAN] [SEVİYE] [KONU] [MESAJ] şeklinde tutulur.
Örneğin; 20/07/2020 23:45:00UTC [INFORMATION] Cart: #123 product added in user cart. {UserId: 345, ProductId: 123}
Şimdi konunun pekişmesi için biraz daha detaylandırıp, örnekler üzerinden ilerleyebiliriz. Uygulamanın hangi ortam için hazırlandığı önemli değildir, neredeyse tüm ortamlarda (Web uygulamaları, mobil uygulamalar, masa üstü uygulamaları vs.) logging mümkündür.
Bilgi (Info) Kayıtları
Yürütme esnasında bilgi amaçlı genellikle Debug (hata ayıklama) ya da Audit (denetim) için kullanılır. Info seviyesindeki kayıtlar bize bir işlevin kullanıldığını, kullanan kişinin kimlik bilgisi hakkında tanımlayıcı bilgiler gibi dilediğimiz verileri sunabilir. Info logları performans ölçümleme/izleme amacıyla da kullanılabilir.
Örnek #1: Bir sayfaya gelen isteklerin kaydedilmesi.
siteadi.com/checkout sayfası ziyaret edildiğinde bilgi sahibi olmak istiyorsak Info seviyesinde bir log fırlatarak bunu sağlayabiliriz. Bunun için ilgili sayfanın kaynak kodlarında ihtiyacımız olan bilgileri içeren bir log kaydetmemiz yeterli olacaktır.
Örnek #2: Performans bilgisinin kaydedilmesi.
Bir butona tıklanılması ile ilgili verilerin çekilmesi/hazırlanması/sunulması arasında geçen süreyi, kullanılan belleği (hatta istersek trace bilgisini) vs. için Info seviyesinde bir log fırlatabiliriz. Bunun için kaynak kodda metodun başlangıcında zaman, memory vs. bilgisini kaydedip, verileri hazırladıktan sonra yine zaman, memory bilgilerini alıp ilk kayıtlardan çıkartarak harcanan kaynak bilgilerini içeren bir log kaydetmeniz yeterli olacaktır.
DipNot: Performans ölçümleri için Newrelic, Raygun, Datadog gibi APM araçları/çözümleri kullanmanız daha doğru olacaktır.
Uyarı (Warning) Kayıtları
Yürütmeye engel olmayan ama sorun oluşturabilecek konular ile ilgili sistemler/paketler/geliştiriciler tarafından Warning (Uyarı) seviyesinde kayıtlar fırlatılır. Bu kayıtları dikkate almalı ve bir dosya ya da log sunucusuna aktarmalıyız. Böylelikle bir sorun olduğunu görebilir ve sonrasında çözümü için yine bu kayıtları kullanarak yollar arayabiliriz.
Örnek: Deprecated olan işlevlerin kullanılıyor olması.
Eğer kullandığımız bir işlev deprecated olarak işaretlendiyse, ilgili işlev çağırıldığında warning seviyesinde kayıtlar fırlayacaktır. Biz bu kayıtlara baktığımızda işlevin yenisi ile değiştirilmesi gerektiğini anlayabilir ve komple kullanımdan kaldırılmadan önce önlemlerimizi alabiliriz.
Hata (Error) Kayıtları
Yürütmeye engel durumlarda fırlayan kayıtlardır. Bu kayıtlar yine sistemler/paketler tarafından fırlatılabildiği gibi geliştiriciler tarafından da üretiliyor olabilirler. En yaygın kullanımı ile Exception Handling sonrasında tutulan kayıtlar ya da yakalanmamış Unexpected Exception durumlarında tutulan kayıtlardır.
Örnek #1: Sürüm uyumsuzluğu / eksik modül.
Uygulamamızın çalışabilmesi için başlangıçta işletim sistemi ya da modül sürümü kontrolü yapıp eğer beklentilerimiz karşılanmıyorsa Error (Hata) seviyesinde bir kayıt oluşturabilir ve çalışmayı durdurabiliriz. Bu sayede uygulamanın başlatılamadığına dair bilgimiz olur ve gerekli düzenlemeleri sağlayabiliriz.
Örnek #2: Validasyon (doğrulama) hataları / güvenlik kontrolleri
Kullanıcı tarafından gelen bir isteği doğrulama esnasında oluşan hatalar ya da gelen isteğin güvenli/geçerli olmasını kontrol esnasında oluşan hatalar için yine Error (Hata) seviyesinde bir kayıt fırlatabilir ve ardından akışı durdurabiliriz. Bu sayede kullanıcının neden dolayı hata aldığını elimizdeki kayıtları inceleyerek ortaya çıkartabilir ve gerekiyorsa aksiyonlar alabiliriz.
Hata seviyeleri kullandığımız dil/kütüphane tarafından belirlenmiş olabilir. Bu nedenle farklı kategorize edilmesi gerekebilir. Hatanın hangi seviyede olacağında dil ya da kütüphane belirleyici olabilir.
Loglarınızı stabil şekilde saklayabildiğiniz, aradığınız logları bulabildiğiniz, bulduğunuzda anlayabildiğiniz ve içerisinde ihtiyaç duyabileceğiniz bilgileri içeren kayıtlarınızın olması dileğiyle…