Log ne demektir? Türkçe olarak tanımlamak gerçekten zor ama şu şekilde diyebiliriz ; “Belirli bir sistemle ilgili olayların otomatik olarak ve zaman damgalı belgelendirmesidir.”
Uygulama geliştirirken, bir şeylerin yanlış gittiğini kontrol etmek için, geliştiriciler genel olarak debugger(hata ayıklayıcıları) kullanır. Ancak canlı ortamda(prod) bu çok mümkün olmayabilir. Bu nedenle, potansiyel hatayı yakalamaya yardımcı olmak için loglama ihtiyacı duyulmuştur.
Java’da, çok uzun bir süre önce, loglamanın bir yolu yoktu. İlkel yöntemlerle loglama yapılıyordu.
- System.out
- System.err
- Exception.printStackTrace()
Fakat bunlar kullanıldığında bazı dezavatajlar vardı. Loglar sadece konsola yazdırılıyordu. Böylece, konsol kapatıldığında, tüm bu logları kaybetmiş oluyorduk. Yani, bu da logların kalıcı bir yerde saklanamaması demektir.
1996 yılının başlarında E.U. SEMPER projesi kendi loglama API’sini yazmaya karar verdi. API’nın, Java için popüler loglama paketi olan log4j haline gelmesi için pek çok çalışma yapıldı. Sonrasında, açık kaynak lisansı olan Apache Yazılım Lisansı kapsamında dağıtılmıştır.
Log4J çok tutulmaya başlamıştı. Sun şirketi Java içinde bir loglama özelliğine ihtiyaç duyduğunu hissetti, ancak doğrudan log4j kullanmak yerine, log4j den esinlenerek JDK 1.4 içerisinde java.util.logging(JUL) paketini oluşturdu.
Java’nın Evrimi yazısında da 1.4 ‘ ün çıkış tarihinin 6 Şubat 2002 olduğundan bahsetmiştik. Buradan çıkarcağımız sonuç Log4J’ye aslında bir rol model diyebiliriz.
Loglama tarafından birbirinden farklı kütüphaneler ortaya çıkmaya başlayınca 2002 yılı ortalarında Jakarta ekibi commons logging(ortak loglama) için JCL(Jakarta Commons Logging diğer bir adı Apache Commons Logging) projesini çıkardılar.
Her bir loglama uygulaması ortak bir API’ye uyarlandı ve böylece uygulamanız org.apache.log4j.Logger’ı kullanmaz onun yerine org.apache.commons.logging.Log’u kullanır. Bu sayede projenizde birden fazla kütüphaneyi kullanabilir ve hepsi için tek bir logger konfigürasyonu kullanabilirsiniz.
Ancak JCL yeterince iyi değildi. Kullanıcılar tarafından çözdüğünden daha fazla sorun yarattığını söyleniyordu. Ceki Gülcü (Log4j’nin mimarı) kollarını sıvadı ve 2005 yılında yeni bir SLF4J (Simple Logging Facade) projesini çıkardı. Aslında Log4jv2 değilde neden SLF4J tartışılır. Ama Ceki Gülcü’nün tek amacı daha iyi bir commons logging (ortak loglama) kütüphanesi yapmaktı. İlerleyen zamanlarda sadec SLF4j için bir makale yazacağım.
Ayrıca Log4j, 1999’dan beri yaygın olarak kullanılıyordu, ancak yeterince iyi değildi, bu yüzden yine Ceki Gülcü yeni bir proje daha yarattı ve 2006 yılında logback piyasaya çıktı. Log4j’den neden daha iyi olduğunu buradan okuyabilirsiniz.