2015-11-27 19 views
5

È possibile eseguire operazioni di questo tipo con la registrazione di log4net?Concatenazione di stringhe con log4net

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

o sto solo a sinistra con la possibilità di brutto "+" concatenamento.

+3

Se non è supportato, è sempre possibile ricorrere a 'string.Format'. +1 per voler evitare la concatenazione. – spender

risposta

3

È possibile utilizzare il formato stringa come questa:

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

Sì, è possibile, in due modi

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

o utilizzare default API

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

Bel punto con DebugFormat – Fabjan

+2

Si noti che DebugFormat * eviterà * il costo della CPU di eseguire qualsiasi operazione stringa o chiamate 'ToString()' se l'attuale loglevel è Info o superiore. Tutte le altre risposte di formattazione delle stringhe non hanno questa ottimizzazione. –

+0

Non esattamente. Sì, la prima riga del metodo 'DebugFormat' controlla il livello di registrazione e può tornare se inferiore. Ma .NET valuterà sempre ** tutte ** le espressioni passate come argomenti prima di chiamare il metodo. Nell'esempio sopra sto passando solo i riferimenti agli oggetti, quindi va bene. Ma cosa succede se per una ragione chiamo 'log.DebugFormat()' passando, lungo gli argomenti, un'espressione che è pesante da valutare come una query del database? Sì, è una cattiva idea, ma solo per evidenziare che se l'operazione 'ToString()' viene valutata a livello di formato String il commento è corretto, altrimenti non –

2

È anche possibile utilizzare la nuova string interpolation feature of C# 6.0 :

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

Ci vorrà un po 'di tempo prima che i miei occhi smettano di sanguinare su questo, ma alla fine è probabilmente la migliore risposta! – spender

+0

Questo è un pessimo esempio, ma ho usato in alcuni dei miei progetti in cui avevamo una stringa lunga e trovavo che fosse più facile da leggere rispetto a dover trovare quale variabile corrisponde a quale segnaposto. Avere questa opzione è un vantaggio per me e Visual Studio ha una formulazione migliore di SO. –

+1

L'avvertenza di chiamare 'Debug' invece di usare' DebugFormat' è che chiamare 'Debug' risulterà sempre nella valutazione della stringa anche se il livello di log è più alto. Quando si chiama 'DebugFormat' la stringa verrà valutata solo se il livello di log è sufficientemente basso. Pertanto, nelle applicazioni in cui le prestazioni rappresentano un problema, è consigliabile prendere in considerazione l'uso di 'DebugFormat'. – Craig