log4j vs logback [kapalı]


152

Kendi kendine yapılan bir ambalajın arkasında log4j kullanıyoruz. Şimdi bunun çok daha fazla özelliğini kullanmayı planlıyoruz.

Yeniden oturum açmak için güncelleme yapmalı mıyız?

(Yani SLF4J gibi bir cephe değil çerçeve)


1
logback jakarta commons logging'e çok benzer - ana farklar nelerdir?
matt b

12
SLF4J (cephedir) commons.logging'e benzer. Temel fark, SLF4J'nin statik bağlama kullanması, commons.logging ise bazı çözünürlük stratejisi kullanmasıdır. Logback (cephenin "doğal" (yani ek sargı katmanı yoktur) uygulaması LOG4J ile karşılaştırılabilir, ancak daha zengin bir API'ye sahiptir.
Huxi

Yanıtlar:


190

Logback yerel olarak SLF4J API'sini uygular. Bu, geri oturum açma kullanıyorsanız, aslında SLF4J API'sini kullandığınız anlamına gelir. Teorik olarak, geri oturum açma API'sinin iç kısımlarını doğrudan günlüğe kaydetme için kullanabilirsiniz, ancak bu kesinlikle önerilmez. Kaydedicilere ilişkin tüm geri dönüş belgeleri ve örnekleri SLF4J API'sı ile yazılmıştır.

Dolayısıyla, logback kullanarak aslında SLF4J kullanıyorsunuz ve herhangi bir nedenle log4j'ye geri dönmek isterseniz, slf4j-log4j12.jar dosyasını sınıf yolunuza bırakarak birkaç dakika içinde bunu yapabilirsiniz.

Log4j için logback veri taşırken logback belirli parçaları, içerdiği özellikle bu logback.xml yapılandırma dosyası hala yani onun log4j eşdeğeri, göç gerekecektir log4j.properties . Diğer yönde, log4j konfigürasyonu, yani taşırken log4j.properties , onun logback eşdeğer dönüştürülmesi gerekir. Bunun için bir çevrimiçi araç var. Yapılandırma dosyalarının taşınmasında yer alan iş miktarı, yazılımınızın tüm kaynak kodları ve bağımlılıkları boyunca dağıtılan günlükçü çağrılarını taşımak için gereken işten çok daha azdır.


28
Bu kadar popüler bir yazılımın geliştiricisiyle konuşmak için gerçek bir fırsat. Log4j için teşekkürler Ceki.
Srujan Kumar Gulla

7
Yasal Uyarı: Bu adam, Log4j, SLF4J ve Logback'in orijinal geliştiricisidir. Ancak Log4j için artık çalışma.
Victor Stafusa

56

Sen-meli? Evet .

Neden? Log4J esasen tarafından kullanımdan kaldırıldı Logback .

Acil mi? Belki de değil.

Acısız mı? Muhtemelen, ancak günlük ifadelerinize bağlı olabilir.

LogBack'ten (veya SLF4J) gerçekten tam olarak yararlanmak istiyorsanız, gerçekten uygun günlük ifadeleri yazmanız gerektiğini unutmayın . Bu, tembel değerlendirme nedeniyle daha hızlı kod ve daha az kod satırı gibi avantajlar sağlayacaktır çünkü korumalardan kaçınabilirsiniz.

Son olarak, SLF4J tavsiye ederim. (Tekerleği neden kendi cephenizle yeniden oluşturuyorsunuz?)


48
Not: log4j projesi log4j kullanımdan kaldırılmış olarak değerlendirilmez.
Thorbjørn Ravn Andersen

17
Terminoloji açıklığa kavuşturulmalıdır; su götürmez bir şekilde log4j projesinin yazarı gördüğü halefi olmaya logback log4j arasında. Her iki projenin de aynı yazarı, bu yüzden düşüncesi biraz ağırlık taşımalı; "log4j projesi" nin kendisi hiçbir şeyi "dikkate almaz". Log4j ile ilişkili mevcut insan grubu farklı görüşlere sahiptir (bazıları aslında hemfikirdir, bazıları şaşırtıcı derecede katılmıyorum). Arkamızda biraz daha geçmişle (orijinal yorumdan 3 yıl sonra), SLF4J + Logback Log4j üzerinde temel kazanmaya devam ediyor.
michael

@michael_n Lütfen Log4j 1'in tek bir kişi tarafından yazılmadığını unutmayın. "Aynı yazar" demek yanlış. Ceki önemli bir yazar, kuşkusuz ama tek yazar değil. Aslında bir çok insan Log4j 1'in ne olduğuna yardımcı oldu.
Christian

@Christian elbette ki herhangi bir olgun apache projesi (ve benim kalifikasyonum, "log4j ile ilişkili mevcut insan grubu" için ima edilmesi gereken "yazılmadı ..."); yine de, yorum düzenleyebilir , wikipedia makalede de belirtildiği gibi, " orijinal olarak yazılmış" söyleyebilirim . Re: "Aslında bir çok insan Log4j 1 ne olduğunu yapmada yardımcı oldu" , bu kesinlikle, kesinlikle doğrudur (yani, daha iyi veya daha kötü için); ve ayrıca, küçük bir şekilde, slf4j + logback'in başlangıcına katkıda bulundu :-)
michael

3
Peki, hepiniz bu ya da bu kütüphane ile mücadele etmek için neler var? Neden kütüphaneleri öldürmeye / tanıtmaya çalışıyoruz? En azından neden birinden diğerinden daha iyi olduğu konusunda akılcı bir muhakeme sağlayın. Tanrım, Stack Overflow bir karmaşa.
Kullanıcı

48

Günlüğe kaydetme dünyasında Cepheler (Apache Commons Logging, slf4j veya Log4j 2.0 API gibi) ve uygulamalar (Log4j 1 + 2, java.util.logging, TinyLog, Logback) vardır.

Temel olarak selfmade sargınızı slf4j IF ile değiştirmelisiniz ve sadece bir nedenden dolayı memnun değilseniz. Apache Commons Logging gerçekten modern bir API sunmasa da slf4j ve yeni Log4j 2 cephesi bunu sağlıyor. Oldukça fazla uygulamanın slf4j'yi bir paketleyici olarak kullandığı göz önüne alındığında, bunu kullanmak mantıklı olabilir.

slf4j, slf4j dokümanlarından alınan bu örnek gibi bir dizi güzel API şekeri verir:

logger.debug("Temperature set to {}. Old temperature was {}.", t, oldT);

Değişken ikamesi. Bu, Log4j 2 tarafından da desteklenir.

Bununla birlikte, slf4j'nin aynı zamanda geri kaydı koruyan QOS tarafından geliştirildiğinin farkında olmanız gerekir. Log4j 2.0, Apache Yazılım Vakfı'nda pişirilir. Son üç yılda yine canlı ve aktif bir topluluk büyüdü. Açık Kaynak, tüm garantileri ile Apache Yazılım Vakfı tarafından yapıldığı için teşekkür ederseniz, doğrudan Log4j 2 kullanmak için slf4j kullanmayı yeniden düşünebilirsiniz.

Lütfen aklınızda bulundurun:

Geçmişte Log4j 1, Logback varken aktif olarak sürdürülmemiştir. Ama bugün işler farklı. Log4j 2 aktif olarak korunur ve neredeyse düzenli olarak yayınlanır. Aynı zamanda birçok modern özellik içerir ve -Itto- birkaç şeyi Logback'ten daha iyi yapar. Bu bazen sadece bir zevk meselesidir ve kendi sonuçlarınızı çıkarmalısınız.

Log4j 2.0'ın yeni özellikleri hakkında hızlı bir genel bakış yazdım: http://www.grobmeier.de/the-new-log4j-2-0-05122012.html

Okurken, Log4j 2'nin Logback'ten değil, aynı zamanda diğer günlük çerçevelerinden de ilham aldığını göreceksiniz. Ancak kod tabanı farklıdır; Log4j 1 ile neredeyse hiçbir şey paylaşmaz ve Logback ile sıfır. Bu, Log4j 2 gibi bazı iyileştirmelere yol açar, kaputun altındaki Dizeler yerine bytestreams ile çalışır. Ayrıca yeniden yapılandırırken olayları kaybetmez.

Log4j 2, bildiğim diğer çerçevelerden daha yüksek hızda oturum açabilir: http://www.grobmeier.de/log4j-2-performance-close-to-insane-20072013.html

Yine de kullanıcı topluluğu Logback'lerden çok daha büyük görünüyor: http://www.grobmeier.de/apache-log4j-is-the-leading-logging-framework-06082013.html

Hepsi en iyi fikrin, elde etmek istediğiniz şeye en uygun günlük çerçevelerini seçmeniz olduğunu söyledi. Üretim ortamında günlüğe kaydetmeyi devre dışı bırakır ve uygulamamda temel günlüğe kaydetmeyi gerçekleştirirsem tam bir çerçeveyi değiştirmezdim. Ancak, günlük kaydıyla biraz daha fazlasını yaparsanız, yalnızca çerçeveler ve geliştiricileri tarafından sağlanan özelliklere bakın. QOS üzerinden Logback için ticari destek alırken (duydum) şu anda Log4j 2 için ticari bir destek yok. log4j'yi kontrol edin 2.

Sağladıkları tüm konforlara rağmen, cephelerin her zaman biraz performans yediğini lütfen unutmayın. Belki sizi hiç etkilemiyor olabilir, ancak kaynaklarınız düşükse sahip olabileceğiniz her şeyi kaydetmeniz gerekebilir.

Gereksinimlerinizi daha iyi bilmeden bir tavsiye vermek neredeyse imkansızdır. Sadece: pek çok insan değiştiği için geçiş yapma. Yalnızca değerini gördüğünüz için değiştirin. Ve log4j'nin öldüğü iddiası artık sayılmıyor. Hayatta ve sıcak.

YASAL UYARI: Şu anda VP, Apache Logging Services ve log4j ile de ilgileniyorum.


19

Sorunuzu tam olarak yanıtlamıyor, ancak kendi yaptığınız paketleyiciden uzaklaşabiliyorsanız , Hazırda Bekletme'nin şimdi (ortak günlük kaydı yerine ) geçtiği Java için Basit Günlük Cephe (SLF4J) var.

SLF4J, Jakarta Commons Logging (JCL) ile gözlenen sınıf yükleyicisi sorunlarından veya bellek sızıntılarından muzdarip değildir.

SLF4J, JDK günlüğünü, log4j ve günlüğü destekler. O zaman doğru olduğunda log4j'den logback'e geçmek oldukça kolay olmalıdır.

Düzenleme: Kendimi açıklığa kavuşturmamış olduğum aplojiler. Log4j veya logback arasında zor bir seçim yapmak zorunda kendinizi izole etmek için SLF4J kullanmanızı öneririz.


3
SLF4J biliyorum. Ama cephe için değil günlük kaydı istedi!

4
Özür. Benim önerdiğim şey, kendi özel cepheniz yerine SLF4J kullanıyorsanız, log4j'den logback'e geçişin daha az acı verici olacağıydı.
araç seti

Atıfın kaynağı nedir? Commons günlüğü denenmiş ve test edilmiş bir bileşendir. Hiç bellek sızıntısı olmadı.
Kshitiz Sharma

1
@KshitizSharma - sağladığım SLF4J dokümantasyon linkinden: slf4j.org/manual.html
toolkit

13

Kararınız aşağıdakilere dayanmalıdır:

  • bu "daha fazla özelliğe" gerçek ihtiyaçlarınız; ve
  • değişikliği uygulama maliyetiniz.

"Daha yeni, daha parlak, daha iyi" olduğu için API'ları değiştirme isteğine direnmelisiniz. "Kırılmamışsa tekme atma" politikasını izliyorum.

Uygulamanız çok karmaşık bir günlük kaydı çerçevesi gerektiriyorsa, bunun nedenini düşünmek isteyebilirsiniz.


3

Olgun proje veya hatta geliştirme aşamalarının derinliklerine uzanan proje, muhtemelen bu tür bir yükseltme IMHO'dan daha fazla kaybedecektir. Logback, bir dizi noktada kesinlikle çok daha ileridir, ancak bir çalışma sisteminde tam olarak değiştirilmek için bir ölçüde değil. Kesinlikle yeni bir gelişme için geri dönüş düşünün, ancak mevcut log4j zaten yayınlanmış ve son kullanıcı bir araya geldi bir şey için yeterince iyi ve olgun. Bu çok öznel, maliyetini kendiniz görmelisiniz.

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.