特定数目我有记录方法名(我通过反射得到)和参数(手动传递给记录器)的记录器。下面是一个正确记录日志的例子:强制的参数
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)
我希望有需要的某种方式,Logger.Log
具有相同数量的作为调用它的方法的参数。
我知道如何在运行时执行此操作(只需使用反射来获取调用者的参数列表,并将其与实际接收的参数进行比较),但这对我来说是一个非常糟糕的解决方案,因为我认为,大部分检查将是不必要的。 (这也意味着你直到运行时才会知道你写错了,然后只有当你碰巧执行那个特定的方法时)。
现在我们不使用的FxCop不幸的是(或者我只是写某种规则的),我怀疑,我也不会改变这一事实获得成功。在编写某种编译器插件的时候,有没有办法强制人们正确使用这种方法?
远射,我还没有用过它自己,但这是否有帮助https://blogs.msdn.microsoft.com/hkamel/2013/10/24/visual-studio-2013-static-代码分析,深入的 - 什么 - 和 - 如何时/?您可以为内置的静态分析工具创建自定义规则。 – itsme86
将日志记录代码放入每种方法似乎都不是很好的可扩展性和可维护性设计。 – Agalo
我认为你应该寻找一些AOP解决方案来记录你不需要记住添加日志记录到每个方法或记住更新参数列表时,如果他们改变。 –