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)
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)
Yanıtlar:
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.
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?)
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.
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.
Kararınız aşağıdakilere dayanmalıdır:
"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.
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.