Java Logging ve Log4J [kapalı]


134

Hala oturum açmak için log4j kütüphanesini bir Java 5 projesine eklemeye değer mi, bazı güzel rollover ayarları olan bir dosyaya bazı istisnalar diyelim. Yoksa standart util.logging tesisi de işi yapacak mı?

Ne düşünüyorsun?


Bkz stackoverflow.com/a/13144054/603516 sayısız log4j 1.2 kilitleme sorunları düşünülmesi için.
Vadzim

Yanıtlar:


115

Açıkladığınız ihtiyaçlar için muhtemelen util.logging ile iyi olduğunuzu söyleyebilirim.

İyi bir karar ağacı için Log4j vs java.util.logging'e bir göz atın

Birinci Soru: Log4j'nin JUL'un SMTPHandler, NTEventLogHandler veya çok uygun FileHandlers gibi sahip olmadığı akıllı işleyicilerine ihtiyaç duyduğunu düşünüyor musunuz?

Soru İki: Kendinize günlük çıktınızın biçimini sık sık değiştirmek istediğinizi görüyor musunuz? Bunu yapmak için kolay ve esnek bir yola ihtiyacınız olacak mı? Başka bir deyişle, Log4j's PatternLayout'a ihtiyacınız var mı?

Soru Üç: Bir üretim ortamında derlendikten ve dağıtıldıktan sonra, uygulamalarınızdaki karmaşık günlük yapılandırmalarını değiştirme yeteneğine kesin bir ihtiyaç öngörüyor musunuz? Konfigürasyonunuz şöyle geliyor mu? "Bu sınıftan gelen şiddetli mesajlar destek adamına e-posta ile gönderilir; sınıfların bir alt kümesinden gelen ciddi mesajlar sunucumuzdaki bir sistem günlüğüne kaydedilir; sınıfların başka bir alt kümesinden uyarı mesajları kaydedilir ağ sürücüsü A'daki bir dosyaya ve ardından her yerden gelen tüm iletiler ağ sürücüsü B'deki bir dosyaya kaydedilir ". Ve kendinizi her iki günde bir ayarlarken görüyor musunuz?

Yukarıdaki sorulardan herhangi birine evet yanıtı verebiliyorsanız, Log4j ile devam edin. Hepsine kesin bir hayır cevabı verirseniz, JUL yeterli olandan daha fazla olacaktır ve SDK'ya zaten dahil edilmiştir.

Bununla birlikte, bu günlerde hemen hemen her proje, sadece başka bir kütüphanenin kullandığı için log4j dahil olmak üzere kuruyor gibi görünüyor.


1
Büyük anket tabanlı cevap. Her biri kendi ihtiyaçlarına göre.
HopeKing

43

Java için Basit Günlüğe Kaydetme Cephe (SLF4J) kullanmanızı öneririz . Log4J içeren farklı sağlayıcıları destekler ve Apache Commons Logging'in yerine kullanılabilir.


6
Commons Logging ile ilgili sorun nedir?
Bart van Heukelom

5
@Art van Heukelom ve yorum upvoters - okuyun makaleler.qos.ch/thinkAgain.html
Stephen C

4
@Stephen C: Bilgi için teşekkürler, bir süre önce öğrendim ve şimdi elimden geldiğince SLF4J kullanıyorum. (Yorumum muhafazakar bir açıklama değil, gerçek bir soru btw idi)
Bart van Heukelom

1
@Bart, Commons Logging paketin dinamik keşfini kullanacak. SLF4J kullanımı (veya kullanılır) arka uçtaki sınıfların hiç yüklenmemesine ihtiyaç duyar.
Thorbjørn Ravn Andersen

21

Log4j uzun zamandır var ve çok iyi çalışıyor. Bunu destekleyecek hiçbir bilimsel çalışmam yok, ancak çok sayıda müşteride gördüklerime dayanarak, diğerlerinden daha fazla kullanıldığını gördüğüm günlük kaydı çerçevesi kolayca. Uzun zamandır var ve yerini bir şey söyleyen Next Big Logging Framework ile değiştirmedim.

Kurulumu son derece basittir ve temel ekleyicileri (çıktılar) öğrenmesi kolaydır. Aşağıdakiler de dahil olmak üzere, mevcut tüm ana bilgisayar ekleyicileri vardır:

  1. ConsoleAppender
  2. DailyRollingFileAppender
  3. ExternallyRolledFileAppender
  4. FileAppender
  5. JDBCAppender
  6. JMSAppender
  7. NTEventLogAppender
  8. RollingFileAppender
  9. SMTPAppender
  10. SocketAppender
  11. SyslogAppender
  12. TelnetAppender
  13. WriterAppender

Artı diğerleri. Kendi ekinizi yazmak da zor değil. Buna ek olarak, her bir ekte, günlüğünüzde özellikle çıktıyı kontrol etmenizi sağlayan çok fazla esneklik vardır.

Bir not, log4j'ye ek olarak günlüğe kaydetme apache commons kullandığımda bir dizi classloader problemim vardı. Yalnızca belirli bir uygulama içindi, ancak ortak günlük kaydı gibi bir soyutlama katmanı kullanırken sunulan esnekliğe sahip olmak yerine, log4j'yi tek başına kullanmayı daha basit buldum.

Daha fazla ayrıntı için bu makaleye bakın :

İyi şanslar!


17

java.util.logging, diğerlerinin sağladığı fazla bagaj olmadan kapsamlı bir kayıt paketi sunar.


5
Ayrıca, varsayılan olarak dahil edilir ve Java tarafından kullanılır (bu yüzden yine de sahip olacaksınız!)
QUIT - Anony-Mousse

7

log4j genel olarak çok daha güzel bir paket ve java.util.logging'in içerdiği bazı hıçkırıklara sahip değil. Log4j'yi doğrudan kullanmanın ortak günlük kaydını kullanmaktan daha kolay olduğunu düşünüyorum.


3
Java.util.logging'in hıçkırıkları hakkında daha spesifik olabilir misiniz?
alkber

Elbette, senkronize edilmiş yöntemleri günlüğe kaydetme yükü gibi: bkz. Github.com/playframework/playframework/issues/6958 ve bugs.openjdk.java.net/browse/JDK-8077846
Will Sargent


3

Log4j ile giderdim. Log4j ile olasılıklar artık kullanılmıyor!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.