2015-11-27 23 views
5

Czy można zrobić coś takiego z log4netem?Łączenie ciągów znaków za pomocą log4net

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

Czy jestem tylko pozostawiony z opcją brzydkiego "+" łączenia.

+3

Jeśli nie jest obsługiwany, zawsze można wrócić do 'string.Format'. +1 za chęć uniknięcia konkatenacji. – spender

Odpowiedz

3

Można użyć formatu ciąg tak:

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

Tak można w dwojaki sposób

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

lub użyj default API

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

Niezły punkt z DebugFormat – Fabjan

+2

Należy pamiętać, że DebugFormat * uniknie * kosztu procesora wykonywania jakichkolwiek operacji na ciągach znaków lub wywołań ToString(), jeśli bieżący poziom to Info lub wyższy. Wszystkie pozostałe odpowiedzi formatowania ciągów nie mają tej optymalizacji. –

+0

Niezupełnie. Tak, pierwszy wiersz metody "DebugFormat" sprawdza poziom rejestrowania i może powrócić, jeśli jest niższy. Ale .NET zawsze oceni ** wszystkie ** wyrażenia, które przekazujesz jako argumenty przed wywołaniem metody. W powyższym przykładzie przekazuję tylko odniesienia do obiektów, więc jest to w porządku. Ale co z tego, że z jakiegoś powodu nazywam 'log.DebugFormat()' przekazując, wzdłuż argumentów, wyrażenie, które jest ciężkie do oceny, podobnie jak zapytanie do bazy danych? Tak, to jest zły pomysł, ale wystarczy podkreślić, że jeśli operacja 'ToString()' jest oceniana na poziomie formatu String, komentarz jest poprawny, w przeciwnym razie –

2

Można również korzystać z nowej string interpolation feature of C# 6.0 :

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

To zajmie trochę czasu zanim moje oczy przestaną krwawić na tym, ale ostatecznie to jest prawdopodobnie najlepsza odpowiedź! – spender

+0

To jest kiepski przykład, ale użyłem w niektórych moich projektach, gdzie mieliśmy długi ciąg i stwierdziliśmy, że jest łatwiejszy do odczytania niż znalezienie odpowiedniej zmiennej odpowiadającej symbolowi zastępczemu. Posiadanie tej opcji jest dla mnie plusem, a Visual Studio ma lepsze formatowanie niż SO. –

+1

Ograniczeniem wywołania 'Debugowanie' zamiast używania' DebugFormat' jest to, że wywołanie 'Debugowanie 'zawsze spowoduje, że łańcuch znaków zostanie oceniony, nawet jeśli poziom dziennika jest wyższy. Podczas wywoływania 'DebugFormat' łańcuch będzie oceniany tylko wtedy, gdy poziom dziennika jest wystarczająco niski. Więc w aplikacjach, w których wydajność jest problemem, możesz rozważyć użycie 'DebugFormat'. – Craig