私はログメッセージのためにlog4netとlog4jの"format" APIを熱心に扱っています。これは、必要なログレベルが有効になっていない場合に引数にToString()を呼び出すコストを回避します。高価な引数を持つDebugFormat()を使用する方法はありますか?
しかし、使用する引数の1つ以上が単純なオブジェクトではない場合があります。何らかの方法で構築する必要がある場合があります。たとえば、次のように:DebugFormatはそれはのToStringメソッドの場合と同様に、それは(あるべきと判断した場合を除き
logger.DebugFormat("Item {0} not found in {1}",
itemID,
string.Join(",", items.Select(i => <you get the idea>))
);
は、それが実行されないように(表現を参加)第二引数をカプセル化する技術があります最初の議論)?
ラムダやfuncのような感じがするかもしれませんが、何かがここで助けてくれるはずですが、私はC#をかなり新しくしています。
それはこれが可能であるようには見えません - 私はあなたがそれのように見える 'のFunc'、 'Expression'などを取ることを可能にする過負荷を見つけることができませんこのシナリオでは、 'if(logger.IsDebugEnabled)'を使用してラップする方法が実際の唯一の選択肢かもしれません。 –
あなたはlog4netまたはカスタムソリューションに何か組み込みを意味していますか? – Evk
デリゲートを取る 'DebugFormat'のラッパーを書くのは簡単ですが、それはあなたが望むものですか? – DavidG