特定數目我有記錄方法名(我通過反射得到)和參數(手動傳遞給記錄器)的記錄器。下面是一個正確記錄日誌的例子:強制的參數
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解決方案來記錄你不需要記住添加日誌記錄到每個方法或記住更新參數列表時,如果他們改變。 –