私は自分のコードに含める必要があるログの量に悩まされています。.NETではパッシブロギングが可能ですか?
これが完了したか、誰かがより良いアイデアを出しているかどうかはわかりませんが、誰かがアプリケーションにロガーを「注入する」方法があるのだろうかと疑問に思っていました。スレッドと静かのような事をすることなく、彼らが起こるとしてのプロセスを記録します:
public void MyProcess(int a, string b, object c)
{
log(
String.Format(
"Entering process MyProcess with arguments: [a] = [{0}]; [b] = [{1}]; [c] = [{2}]",
a.ToString(),
b,
c.ToString()
);
try
{
int d = DoStuff(a)
log(
String.Format(
"DoStuff({0}) returned value {1}",
a.ToString(),
d.ToString()
)
);
}
catch (Exception ex)
{
log(
String.Format("An exception occurred during process DoStuff({0})\nException:\n{1}",
a.ToString(),
ex.ToString())
)
}
}
私は私のロガーに言うことができればどのような素晴らしいだろうことです
:それは、その後に行くのすべてを監視します
Monitor(MyClass.MyMethod)
その方法の中には、wiこれらのメソッドに渡された値、例外などが発生します。
過去にこのようなものを実装した人はいますか?それでもはになりますか?このような方法でログインするのはパイプの夢ですか?
私はこれを行うものを設計するのが大好きですが、どこから始めたらいいのか分かりません。もちろん、私はホイールを再発明したくないのですが、すでに完成していれば、誰かが私を正しい方向に向けることができれば素晴らしいことでしょう。
任意の提案をありがたく受け取ったことでしょう...
編集:私は、私がログに必要な詳細レベルへと照会の回答にコメントしようと思いました。重要なロギングが設定されている場合は、例外とともに特定の情報だけがログに記録されるのに対して、詳細なロギングが指定されていればすべてがログに記録されるように、構成可能なロギングレベルを設定する必要があることがよくあります。致命的なロギングが設定されていると、アプリケーションを終了させる情報だけが記録されます。このようなものは設定可能か、AOPはログレベルの数に応じて3つまたは4つの異なるビルドを必要としますか?あなたは「周り」方法をログに記録するPostSharpを使用することができます致命的、クリティカル、情報、詳細な
これは実行時に設定することができますが、実行時に実行されるロガーは引き続きすべての情報を受け取り、何を記録するかを決定する必要があります。すべての情報のオーバーヘッドがロガーに渡されることを望まない場合、唯一の方法は異なるビルドを持つことです。 –