2015-11-27 13 views
5

log4netロギングでこれを行うことはできますか?log4netとの文字列の連結

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

または、私は醜いオプションで接続しました。"+"

+3

サポートされていない場合は、いつでも 'string.Format'にフォールバックできます。 +1は連結を避けたい。 – spender

答えて

3

あなたは、このような文字列の書式を使用することができます。

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

はいすることができます、二つの方法

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

それともdefault API

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

DebugFormatの良い点 – Fabjan

+2

DebugFormatは、文字列操作のCPUコストや、現在のログレベルがInfo以上の場合は 'ToString()'呼び出しを避ける*ことに注意してください。他のすべての文字列書式設定の回答には、この最適化がありません。 –

+0

正確ではありません。はい、 'DebugFormat'メソッドの最初の行はロギングレベルをチェックし、低い場合は返されます。しかし.NETは、**メソッドを呼び出す前に引数として渡す式を常に**すべて**評価します。上記の例では、オブジェクト参照のみを渡していますので、問題ありません。しかし、理由のために 'log.DebugFormat()'を引数に沿って渡すと、データベースクエリのように評価される式が重いでしょうか?はい、それは悪い考えですが、 'ToString()'演算が文字列形式のレベルで評価されていれば、コメントは正しい、そうでなければ –

2

あなたはまた、新しいstring interpolation feature of C# 6.0を使用することができます使用で:

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

私の目がこれで出血を止めるまでには時間がかかるでしょうが、最高の答え! – spender

+0

これは良い例ではありませんが、長い文字列があった私のプロジェクトのいくつかでは、どの変数がどのプレースホルダに対応しているのかを調べるよりも読んでいました。これがオプションであることは私にとってプラスであり、Visual StudioはSOより優れた形式をとっています。 –

+1

'DebugFormat'を使用する代わりに' Debug'を呼び出す警告は、 'Debug'を呼び出すとログレベルが高い場合でも常に文字列が評価されるということです。 'DebugFormat'を呼び出すとき、文字列はログレベルが十分に低い場合にのみ評価されます。したがって、パフォーマンスが懸念されるアプリケーションでは、 'DebugFormat'の使用を検討してください。 – Craig