メソッド名(私がリフレクションで取得する)とパラメータ(ロガーに手動で渡される)を記録するロガーがあります。ロギングを行う適切な方法の例を次に示します。特定の数のパラメータを適用する
public void Foo() {
// This is correct - the method has no parameters, neither does the logging
Logger.Log();
// Method
}
public void Foo1(int a, int b) {
// Log both of the parameters correctly
Logger.Log(a, b);
// Rest of method
}
ただし、人々はこれを間違って定期的に呼びます。
public void Foo1(int a, int b) {
// Didn't record any of the parameters
Logger.Log();
// Rest of method
}
又は
public void Foo1(int a, int b, int c) {
// Someone changed the number of parameters but didn't update the logging call
Logger.Log(a, b);
}
ログメソッドのシグネチャがある:たとえば
public void Log(params object[] parameters)
Iは、Logger.Log
が同じ数を有することを必要とするいくつかの方法を持っているしたいですそれを呼び出すメソッドとしてのパラメータ
私は実行時にこれを行う方法を知っています(呼び出し側のパラメータリストを取得し、実際に受け取ったパラメータと比較するためにリフレクションを使用するだけです)。しかし、これは本当に悪い解決策です小切手の大部分は不要となる。 (それは、あなたが間違って書いたことを実行時まで知っていなかったことを意味し、その特定のメソッドを実行した場合にのみ)。
残念ながら私たちはFxCopを使用していません(または私は何らかのルールを書いています)。私はその事実を変更することに成功しないだろうと思っています。ある種のコンパイラプラグインを書くのに手間がかかりますが、人々にこのメソッドを正しく使用させる方法がありますか?
ロングショット、と私はそれを自分自身を使用していないが、これはhttps://blogs.msdn.microsoft.com/hkamel/2013/10/24/visual-studio-2013-static-を助けるん深さのコード分析 - 時代遅れ/いつ?/?組み込み静的解析ツールのカスタムルールを作成することができます。 – itsme86
ロギングコードを各方法に入れることは、スケーラビリティとメンテナンス性に優れた設計ではないようです。 – Agalo
私はロギングのために、すべてのメソッドにロギングを追加することを忘れたり、パラメータリストが変更されたときにパラメータリストを更新することを忘れたりする必要がないAOPソリューションを探していると思います。 –