Neden biri diğeri yerine aşağıdaki paketlerden birini kullansın?
- Java Günlüğü
- Commons Günlüğü
- log4J
- sLF4J
- Yeniden giriş yap
Neden biri diğeri yerine aşağıdaki paketlerden birini kullansın?
Yanıtlar:
API görünümünün kronolojik sırasına göre (bildiğim kadarıyla):
logger.debug("The entry is {}.", entry);
//which expands effectively to
if (logger.isDebugEnabled()){
// Note that it's actually *more* efficient than this - see Huxi's comment below...
logger.debug("The entry is " + entry + ".");
}
Java'da günlüğe kaydetmeyi kafa karıştırıcı, tutarsız, yetersiz belgelenmiş ve özellikle gelişigüzel buluyorum. Dahası, bu günlükleme çerçeveleri arasında büyük miktarda benzerlik vardır ve bu da çabanın tekrarlanmasına ve gerçekte hangi günlüğe kaydetme ortamında olduğunuza dair kafa karışıklığına neden olur. Özellikle, ciddi bir Java web uygulaması yığınında çalışıyorsanız, genellikle çoklutek seferde kayıt ortamları; (ör. hazırda bekletme, log4j ve tomcat java.util.logging kullanabilir). Apache commons, farklı günlükleme çerçevelerini köprülemek içindir, ancak gerçekten sadece daha fazla karmaşıklık ekler. Bunu önceden bilmiyorsanız, bu tamamen şaşırtıcıdır. Günlük mesajlarım neden konsola vb. Yazdırılmıyor? Ohh çünkü log4j'ye değil Tomcat günlüklerine bakıyorum. Yine bir başka karmaşıklık katmanı ekleyerek, uygulama sunucusu, belirli bir web uygulaması için yerel konfigürasyonları tanımayabilen global günlük kaydı konfigürasyonlarına sahip olabilir. Son olarak, tüm bu kayıt çerçeveleri ÇOK KOMPLİKASYONDUR. Java'da oturum açmak, benim gibi geliştiricilerin hayal kırıklığına uğramasına ve kafalarının karışmasına neden olan düzensiz bir karmaşa oldu.
Java'nın ilk sürümlerinde, bu senaryoya yol açan yerleşik bir günlük kaydı çerçevesi yoktu.
Daha önce bahsedilmeyen önemli bir nokta var:
SLF4J (ve günlük arka ucu olarak Logback ve LOG4J), Eşlenmiş Tanılama Bağlamı (MDC, bkz. Javadoc ve belgelere ) için desteğe sahiptir .
Bu esasen, günlük olayınıza ek bağlam bilgisi eklemek için kullanabileceğiniz bir iş parçacığı yerel Eşlemidir <Dize, Dize>. MDC'nin mevcut durumu her olaya eklenir.
İsteğin kullanıcı adı ve URL'si (bir web uygulaması olması durumunda) gibi şeyler eklerseniz, bu inanılmaz derecede yararlı olabilir. Bu, örneğin bir filtre kullanılarak otomatik olarak yapılabilir.
Ayrıca sorunun yanıtlarına da bakın Bir hatayı günlüğe kaydetmek için en iyi yöntemler nelerdir? , özellikle:
Commons Logging ile ilgili bazı olası sınıf yükleme sorunları vardır.
Log4J ve SLF4J, Log4J ile pratikte bulunan sorunlardan öğrenerek aynı kişi tarafından geliştirildi.
Şirket projemizde LOG4j kullanıyoruz ve Stephen'ın örneğinde gösterdiği gibi kullanımı çok kolay. Ayrıca LOG4j için kendi desen sınıflarımızı yazdık, böylece kendi çıktı dosyası şemalarınızı oluşturabilirsiniz. Günlük dosyanızın nasıl görünmesi gerektiğini tarif edebilirsiniz. Orijinal log4j sınıflarını geliştirmek mümkündür.
Tüm LOG4j özelliklerini bir log4j.properties dosyasında değiştirebilirsiniz, böylece farklı projeler için farklı dosyalar kullanabilirsiniz.
Java günlüğü benim favorim değil, ancak bunun nedeni başlangıçta log4j kullanmam olabilir.
Commons Günlüğü bakış temeldeki günlüğü çerçevesinde üzerinde hiçbir kontrole sahip olduğunda, kütüphane koddan günlüğü: kendi varlığı için neden verir. Dış uygulamalara bağlanacak olan çeşitli Apache projeleri için çok önemlidir. Tam kontrole sahip olduğunuz dahili BT projeleri için belki o kadar önemli değil.
Bununla birlikte, tanıdığım diğer birçok geliştirici gibi Commons Logging'e yazıyorum. Bunun nedeni zihinsel yükünüzü en aza indirmektir: projeleri veya işleri değiştirebilir ve yeni bir çerçeve öğrenmeniz gerekmez (yeni işin / projenin aynı zamanda CL kullanması ve / veya onları buna geçmeye ikna etmeniz şartıyla).
Ayrıca, hangi çerçeveyi kullanırsanız kullanın kendi sarmalayıcılarınızı oluşturmanın bazı değerleri vardır. Açıklandığı gibi burada , ben (önemli) özel stringification sağlamak için bir LogWrapper nesnesini kullanın ve (daha az önemli) giriş tabloların görsel dağınıklığı azaltmak ister.
Genelde Log4J'yi varsayılan olarak kullanırdım.
Java 1.4'e bağımlı olsaydım Java Logging'i kullanırdım, ancak yine de Log4J'yi tercih ederim.
Halihazırda kullanmış bir şeyi geliştiriyor olsaydım, Commons Logging'i kullanırdım.
Günlük çerçevelerinden herhangi birine yazabilen ince bir ağaç kesme cephesi oluşturmanızı öneririm, bu noktada destek motoru seçimi hemen hemen tartışmalı bir noktaya dönüşür.