logo

Log4j ve SLF4J

SLF4J(Java için Basit Günlük Kaydı Cephesi) birçok kayıt çerçevesine genel erişim sağlamak üzere tasarlanmış bir API'dir; log4j de bunlardan biridir.

Temel olarak bir soyutlama katmanıdır. Bu bir günlük kaydı uygulaması değildir. Bu, bir kitaplık yazıyorsanız ve SLF4J kullanıyorsanız, bu kitaplığı kullanması için başka birine verebileceğiniz ve SLF4J ile hangi günlük tutma uygulamasının kullanılacağını seçebilecekleri anlamına gelir; örneğin log4j veya Java günlük API'si. Uygulamaların kendilerine bağımlı kütüphaneleri kullanmaları gibi farklı loglama API'lerine bağımlı olmalarını önlemek için kullanılır.

Ancak Log4J ile SLF4J arasındaki tek satırlık cevabı hak eden farkı detaylandırıyoruz. yani sorunun kendisi yanlıştır. SLF4J ve Log4J farklıdır veya benzer bileşenler değildir. Adından da anlaşılacağı gibi SLF4J, Java için basit bir günlük kaydı cephesidir. Bu bir günlük kaydı bileşeni değildir ve hatta gerçek günlük kaydını yapmaz. Bu yalnızca temeldeki bir günlük kaydı bileşenine yönelik bir soyutlama katmanıdır.

Bu durumuda Log4j , bir günlük kaydı bileşenidir ve yapılması istenen günlüğe kaydetme işlemini gerçekleştirir. Yani SLF4J ve Log4J'nin mantıksal olarak iki farklı şey olduğunu söyleyebiliriz.

Log4j ve SLF4J

Şimdi tek yapmanız gereken, çalışma zamanında hangi günlük çerçevesini kullanmanız gerektiğini seçmenizdir. Bunun için iki jar dosyası eklemeniz gerekecek:

  • SLF4J bağlama jar dosyası
  • İstenilen günlük kaydı çerçevesi jar dosyaları

Örneğin, projenizde log4j'yi kullanmak için aşağıdaki jar dosyalarını eklemeniz gerekir:

  • slf4j-log4j12-1.7.12.jar
  • log4j-1.2.17.jar

Her iki jar dosyasını da uygulama sınıf yolunuza yerleştirdikten sonra, SLF4J bunu otomatik olarak algılayacak ve log4j yapılandırma dosyasında sağladığınız yapılandırmaya dayalı olarak log ifadelerini işlemek için log4j'yi kullanmaya başlayacaktır.

Örneğin, proje sınıfı dosyanıza aşağıdaki kodu yazabilirsiniz:

 import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class HelloWorld { public static void main(String[] args) { Logger logger = LoggerFactory.getLogger(HelloWorld.class); logger.info('Hello World'); } } 

SLF4J neden Log4J'den daha iyi?

SLF4J ve Log4j arasında birini tercih etmek her zaman zordur. Seçme şansınız varsa size şunu öneririm; günlük kaydı soyutlaması her zaman günlük kaydı çerçevesinden daha tercih edilir. Özellikle SLF4J gibi bir günlük kaydı soyutlaması kullanırsanız, tek bir bağımlılığı tercih etmeden dağıtım sırasında ihtiyaç duyduğumuz herhangi bir günlük kaydı çerçevesine geçiş yapabiliriz.

Log4j yerine SLF4J'yi seçecek kadar iyi olan nedenler aşağıdadır:

  • Soyutlamayı kullanmak her zaman daha iyidir.
  • SLF4J, herhangi bir belirli günlük kaydı uygulamasından bağımsız olmasını sağlayan açık kaynaklı bir kitaplık veya dahili kitaplıktır; bu, birden fazla kitaplık için birden fazla günlük kaydı yapılandırmasını yönetmeye gerek olmadığı anlamına gelir.
  • SLF4J, isInforEnabled(), isDebugEnabled() vb. gibi kontrolleri kaldırarak kodun okunabilirliğini artıran yer tutucu tabanlı günlük kaydı sağlar.
  • SLF4J'nin kayıt yöntemini kullanarak, hem CPU hem de bellek açısından verimli olan kayıt mesajları (dize) oluşturma maliyetini ihtiyacınız olana kadar erteliyoruz.
  • SLF4J daha az sayıda geçici dize kullandığından, çöp toplayıcı için daha az iş anlamına gelir; bu da uygulamanız için daha iyi verim ve performans anlamına gelir.

Yani aslında SLF4J, log4j'nin yerini almaz; ikisi birlikte çalışıyor. Uygulamanızdan log4j bağımlılığını ortadan kaldırır ve gelecekte onu daha yetenekli bir kütüphaneyle değiştirmenizi kolaylaştırır.