2015-11-27 35 views
5

Log4net günlüğü ile böyle bir şey yapmak mümkün mü?Dizeleri log4net ile birleştirmek

logger.Debug("username : {0} password : {1} server : {2}",username,server,password) 

Ya ben sadece çirkin "+" bitiştirmek seçeneğiyle kaldım.

+3

Desteklenmezse, her zaman string.Format 'geri alabilirsiniz. Birleştirmeyi önlemek için +1. – spender

cevap

3

Böyle dize biçimini kullanabilirsiniz:

logger.Debug(string.Format("username : {0} password : {1} server : {2}", 
          username, server, password)) 
9

Evet yapabilirsiniz, iki şekilde

log.Debug(String.format("username : {0} password : {1} server : {2}",username,server,password)); 

Ya default API

logger.DebugFormat("username : {0} password : {1} server : {2}",username,server,password) 
+0

DebugFormat ile güzel nokta – Fabjan

+2

DebugFormat'ın herhangi bir dize işlemi yapmanın CPU maliyetinden * kaçınılacağını veya mevcut loglevel'in Bilgi veya daha yüksek olması durumunda ToString() 'ın çağrılacağını unutmayın. Diğer dize biçimlendirme yanıtları bu optimizasyona sahip değil. –

+0

Tam olarak değil. Evet, 'DebugFormat' yönteminin ilk satırı günlüğe kaydetme düzeyini kontrol eder ve daha düşükse geri dönebilir. Ancak .NET her zaman, ** yöntemi ** çağırmadan önce argüman olarak ilettiğiniz ifadeleri ** her zaman değerlendirecektir. Yukarıdaki örnekte sadece nesne referanslarını geçiyorum, bu yüzden bu iyi. Ama bir sebepten ötürü 'log.DebugFormat()' ifadesini argümanlar boyunca bir veritabanı sorgusu gibi değerlendirmek için ağır olan bir deyimi iletirsek? Evet, bu kötü bir fikir ama sadece "ToString()" işlemi String format seviyesinde değerlendirilirse, yorumun doğru olmadığını, aksi takdirde –

2

Ayrıca yeni string interpolation feature of C# 6.0 kullanabilirsiniz kullanmak içinde :

logger.Debug($"username : {username} password : {password} server : {server}") 
+1

değil. Gözlerimin bu şekilde kanamayı bırakması biraz zaman alacak, ama sonuçta muhtemelen en iyi cevap! – spender

+0

Bu kötü bir örnektir, ancak uzun dizelerimizin olduğu ve benim için hangi değişkenin hangi yer tutucusuna karşılık geldiğini bulmaya daha kolay olduğunu düşündüğüm projemde kullanıyorum. Bunun benim için bir seçenek olması benim için bir artı ve Visual Studio SO'dan daha iyi bir format yapıyor. –

+1

'DebugFormat' yerine' Debug' çağrısı yapılması, 'Debug' işlevinin çağrılması, günlük düzeyi daha yüksek olsa bile, değerlendirilmekte olan dizede her zaman sonuçlanacaktır. 'DebugFormat' öğesini çağırırken, dize yalnızca günlük seviyesi yeterince düşük olduğunda değerlendirilir. Dolayısıyla, performansın kaygılandığı uygulamalarda, 'DebugFormat' kullanmayı düşünebilirsiniz. – Craig