Devam edin: slf4j yerine log4j2 API'sini programlayın
Güvenlidir: Log4j2 API, slf4j ile tamamen aynı garantileri ve daha fazlasını sunar.
Artık Log4j2'nin kendisi bir API ve bir uygulama modülüne ayrıldığından, SLF4J kullanımında artık herhangi bir değer yoktur.
Evet, seçeneklerinizi açık tutmak iyi bir mühendislik uygulamasıdır. Daha sonra başka bir günlük uygulamasına geçmek isteyebilirsiniz.
Yaklaşık son 10 yıldır, uygulamanızda böyle bir esneklik oluşturmak, SLF4J gibi bir sarmalayıcı API kullanmak anlamına geliyordu. Ancak bu esneklik ücretsiz olarak gelmiyor: Bu yaklaşımın dezavantajı, uygulamanızın temeldeki günlük kitaplığının daha zengin özellik kümesini kullanamamasıdır.
Log4j2, uygulamanızın en düşük ortak payda ile sınırlı olmasını gerektirmeyen bir çözüm sunar.
Çıkış vanası: log4j-slf4j
Log4j2 bir log4j-to-slf4j
köprü modülü içerir . Log4j2 API'sine göre kodlanan herhangi bir uygulama, herhangi bir zamanda destek uygulamasını herhangi bir slf4j uyumlu uygulamaya geçirmeyi seçebilir.
Soruda belirtildiği gibi, Log4j2 API'sini kullanmak doğrudan daha fazla işlevsellik sunar ve slf4j gibi bir sarmalayıcı API kullanmaya kıyasla bazı işlevsel olmayan avantajlara sahiptir:
- Mesaj API
- Tembel günlük kaydı için Lambdas
- Sadece Dizeler yerine herhangi bir Nesneyi Günlüğe Kaydet
- Çöpsüz: Mümkünse değişkenler oluşturmaktan veya Dizeler oluşturmaktan kaçının
- CloseableThreadContext, işiniz bittiğinde öğeleri MDC'den otomatik olarak kaldırır
(Daha fazla ayrıntı için SLF4J'de bulunmayan 10 Log4j2 API özelliklerine bakın.)
Uygulamalar, Log4j2 API'sinin bu zengin özelliklerini, yerel Log4j2 çekirdek uygulamasına kilitlenmeden güvenle kullanabilir.
SLF4J hala sizin emniyet valfinizdir, sadece uygulamanızın artık SLF4J API'ye karşı kodlama yapması gerektiği anlamına gelmez.
Açıklama: Log4j2'ye katkıda bulunuyorum.
Güncelleme: Log4j2 API'ye programlamanın bir şekilde "bir cephe için cephe" getirdiği konusunda bazı karışıklıklar var gibi görünüyor. Log4j2 API ve SLF4J arasında bu açıdan bir fark yoktur.
Her iki API, yerel bir uygulama kullanırken 2 bağımlılık ve yerel olmayan bir uygulama için 4 bağımlılık gerektirir. SLF4J ve Log4j2 API bu açıdan aynıdır. Örneğin:
slf4j
logback (veya log4jv1) içeriyorsa ? Daha sonra uygulamanızı kullanmak için üçüncü bir kaydedici yüklemeye zorlanmalı mıyım? Ya da belki kurumsal güvenlik sadecejava.util.logging
üretimde kullanabileceğinize karar veriyor , o zaman ne olacak?