İşte genel kabul görmüş gibi görünüyor iki ifade vardır, ama gerçekten üstesinden edemez:slf4j'de parametrelenmiş günlüğe kaydetme - scala'nın ad parametrelerine göre nasıl karşılaştırılır?
1) Scala'nın by-name incelikle yerine params o kadar da can sıkıcı log4j kullanım deseni:
if (l.isDebugEnabled()) {
logger.debug("expensive string representation, eg: godObject.toString()")
}
çünkü by-name-parametresi (Scala'ya özgü dil özelliği) yöntem çağırma işleminden önce değerlendirilmiyor.
2) Ancak, bu sorun slf4f içinde parametrized giriş yaparak çözüldü :
logger.debug("expensive string representation, eg {}:", godObject[.toString()]);
Yani, bu nasıl çalışır? slf4j kitaplığında, "hata ayıklama" yöntemi yürütme işleminden önce parametrenin değerlendirilmesini engelleyen bazı düşük düzeyli sihir var mı? (Bu mümkün mü? kütüphanesi, dilin böyle temel bir yönünü etkileyebilir mi?)
Veya bir nesnenin bir String'den ziyade yönteme geçirilmesi basit bir gerçektir? (ve belki de bu nesnenin toString() öğesi, varsa, debug() yönteminde çağrılır).
Fakat o zaman, log4j için de geçerli değil mi? (Nesne paramları ile yöntemleri vardır). Ve bu, bir dizgeyi iletirseniz - yukarıdaki kodda olduğu gibi - log4j ile aynı şekilde davranacağı anlamına gelmez mi?
Bu konuda biraz ışık tutmayı çok isterim.
Teşekkürler!
Crystal clear, çok teşekkürler. Galiba tam bir açıklamanın, umduğum ve ummadığım büyüyü oluşturduğunu sanıyorum. :) – teo