Download CV

Log4j ile Loglama

Aralık 17, 2021

Java’da log4j ile Loglama

Loglama nedir?

Bir uygulama içerisinde data akışını, hataları vb. kaydetme işine loglama diyoruz. Peki bu işlemleri neden kaydetme gereksinimi duyuyoruz?

Uygulamamız runtime’da(çalışma zamanı) ne yapmış? Hangi metotları kullanmış yada eğer hata varsa bu hatanın nereden fırlatıldığı bilmek inanılmaz faydalıdır çoğu zaman.

O yüzden loglama kavramı olmadan büyük çaplı bir uygulamanın gelişimi, varlığı pek sağlıklı değildir.

Apache Log4j Nedir ?

Log4j, Apache Software Foundation tarafından 1996 yılında java ile geliştirilmiş open source bir loglama servisidir. log4j Apache Software Foundation’un geliştridiği bir loglama kütüphanesidir. Log4j kullanmak için jar dosyası ve log4j tanımlarının yapıldığı properties dosyasına ihtiyaç duyulmaktadır. Log4j seviye bazlı loglama yapabilmektedir. Trace seviyesinden Fatal seviyesine doğru gidildikçe log kapsamı da artacaktır. Bu seviye log4j.properties dosyasından ayarlanabilir. Bu seviyeler aşağıdaki görselde gösterilmiştir.

Loglama şu avantajları bize sunmaktadır :

  • Hızlı hata ayıklama : Bir problemle karşılaştığımızda, log kayıtları bize sorunun nereden kaynaklandığını gösterecektir. İyi yazılmış bir loglama kodu, sorunun asıl kaynağının nereden çıktığını daha kısa sürede bulmamızı sağlayacaktır. Bunun sonucunda da debug işleminde vakit kazanacağız.
  • Geçmiş : Loglama bilgileri istenilen bir dizinde, istenilen bir dosya isminde tutulabilir. Böylece geçmiş kayıtlarımıza ulaşabiliriz ve hata durumunda hata saati, hatanın kaynaklandığı yer vb. gibi bilgilere ulaşırız. Log dosyalarına Login_log_11_11_2021 gibi isimler de vererek daha da ayrıntılandırabiliriz.
  • Kontrol edilebilirlik : Log dosyalarınızı hangi formatta kaydedeceğiniz(Xml vb.) belirleyebilirsiniz. Hatta loglamayı veritabanı üzerinde bile tutabiliriz. Bununla birlikte loglamanın yapılacağı path’i de seçebiliyor olacağız. Bunu configuration dosyası üzerinden yapacağız.

İlk önce projemizde log4j’i kullanmak için nasıl nesne oluşturuyoruz, bu nesnenin hazır methotlarına nelerdir bir göz atalım.

Yukarıda kullandığımız metotlar (debug,info,warn,error,fatal ) log seviyeleridir aynı zamanda.

  • FATAL: Sadece log seviyesi fatal olan mesajları göstermek için
  • ERROR: Log seviyesi error ve fatal olan mesajları göstermek için
  • WARNING: Log seviyesi warning ,error ve fatal olan mesajları göstermek için
  • INFO: Log seviyesi info, warning ,error ve fatal olan mesajları göstermek için
  • DEBUG: Log seviyesi info, warning ,error ve fatal olan mesajları göstermek için

Log seviyeleri hiyerarşik bir yapı izlemekte. Örneğin konsola yazdıracağım mesajın log seviyesini debug olarak belirlersem, sadece debug mesajı değil altında kalan (info,warn,error ve fatal) mesajlarını konsolda göreceğim anlamına geliyor.

public class Log4j {

final static Logger Log = Logger.getLogger(Log4j.class);

Warn Level public static void warn (String message) { Log.warn(message); }

Error Level public static void error (String message) { Log.error(message); }

Fatal Level public static void fatal (String message) { Log.fatal(message); }

Debug Level public static void debug (String message){Log.debug(message);

}

Aşağıdaki gibi bir metot oluşturup çağırdığımızda sonuçları log doyasında görebiliriz.

@Test

public void tTest() {

debug(“Ben bir debug mesajiyim”);

info(“Ben bir info mesajiyim”);

warn(“Ben bir warn mesajiyim”);

error(“Ben bir error mesajiyim”);

fatal(“Ben bir fatal mesajiyim”); }

}

Log4j loglamayı seviye bazlı yapar. Bu seviye log4j.properties dosyasından ayarlanabilir. Bir hata yada kriz anında bu seviye yükseltilebilir. Normal bir durumda seviye azaltılabilir. O zaman daha az log yazar ve sistem kaynaklarını da minimum seviyede kullanır.

Şekilde de görüldüğü gibi seviye merkeze doğru geldikçe loglama kapsamı azalır. Genelde Debug seviyesinde çalışılır. Böylelikle tüm logları basıyor olacağız. Bu seviyenin kontrolü de log4j.properties içinden yapılacaktır.

Log4j için kaynak kodlara bu linkten ulaşabilirsiniz.

Posted in Software
Write a comment