2015-04-24 23 views
7

Yeni bir proje ile başlıyorum ve günlüğe kaydetme hakkında bazı şeyler yaptım. Hep günlüğü yapılır gösterdiği her sınıf, kendi statik Logger sahip olduğu desen kullandı:Java Günlüğü - Sarıcı?

private static final Logger logger = Logger.getLogger(LoggingInterceptor.class); 

I do not gerçekten ben bir şey oturum olacak her sınıfa bu satırı kopyalamak zorunda olduğu bu yaklaşım gibi . Log sınıfının, oturum açmanın statik yöntemleriyle olduğu Android yaklaşımını kullanmayı düşündüm. Başkaları tarafından yapılan benzer bir yaklaşım için internette araştırmaya başladım, ama hiçbir şey bulamadım. Bu yüzden sorum şu: Bu yaklaşımın ne gibi dezavantajları olabilirdi?

DRY modelini izledikçe, bazı avantajlardan ziyade, hiçbirini düşünemiyorum. Farklı kategoriler, Android'de olduğu gibi, statik Günlük yöntemlerinin parametreleri olan "etiketler" ile ele alınabilir. Örneğin:

Log.debug(tag, message, exception); 

Günlüğü sınıfı kendisi daha sonra Log4j hatta SLF4J olarak ortak bir Günlüğü Framework kullanmak.

Görüşlerinizle ilgileniyorum. java.util.logging.Logger API ve this article dayanarak

+0

FWIW, Oynatma çerçevesi 2 benzer bir yaklaşım kullanır. – smk

+2

"[...] DRY desenini takip ediyor"? Au contraire! Önerilen yaklaşımınız, her zaman bir etiket belirtmenizi zorlarken, statik bir son değişkende sınıf (veya kategori) için bir günlükçünün alınması yalnızca bir kez belirtir. Kategoriyi değiştirmeye ne zaman karar verirsiniz? – Seelenvirtuose

+0

Evet, bu bir nokta olabilir. Peki ya başka bir etiket için bir açıklama yaparsanız? Etiketlerin sadece kütüğün yerleştirildiği sınıfı değil, sistemin bir alt sistemini belirtmek için kullanıldığını dikkate alarak. Bu nedenle, birden fazla sınıfta yapılan bazı alt sistem günlüklerini paketlemek isteyebilirsiniz. – homedom

cevap

2

, getLogger() temel nedeni alt sistemleri arasındaki bağımsız bir şekilde, kullanılan aynı Logger ve Handler seti sağlamaktır.

Java'nın önerdiği çözüm, her dosyanın en üstünde bulunan Logger'u elde etmektir ve daha sonra ihtiyacınız olan her seferinde bu nesneye günlüğe kaydedilmelidir. tag gerektirecektir statik Log.debug kullanma

doğru Handler seti kullanılıyordu böylece her seferinde işlenecek. Böylece, Log nesnesinin gitmeye hazır olmasından daha az verimli olacaktır. Ancak, handlers veya handlers'u kullanmıyorsanız veya alt sistemler arasında ayrım yapmıyorsanız, kitaplık ihtiyaçlarınızı karşıladığı sürece, statik işlevler makul bir kısayol olabilir.