Недавно мне было поручено добавлять операторы журналирования для каждого вызова метода в решении. Эти записи журнала должны содержать класс и имя метода.
Я знаю Я могу использовать методы MethodBase.GetCurrentMethod ()
и StackFrame.GetMethod ()
. Что лучше? Есть ли лучший (или более производительный) способ получить имя класса и метода ?
У меня есть два предложения:
Выполните пользовательское действие перед сборкой, в котором вы замените какую-либо заглушку в начале каждого метода:
void PerformSomeAction() { //PUT_LOGGING_HERE }
затем в пользовательском инструменте замените эти заглушки именами методов. Это гарантированно быстрый способ, но требует некоторых вложений.
this.getType().toString()
должен дать вам класс
О методе кажется, что stackFrame и methodbase являются наиболее очевидными решениями, я не могу комментировать, какое из них более эффективно.
Что ж, лучший/самый быстрый способ - включить строку в каждую функцию. Это может показаться не самым практичным решением, но MethodBase.GetCurrentMethod()
требует кодирования внутри каждого метода, который его использует. т.е. вы можете написать
string funcName = "MyClass.MyFunction(int, int)";
или вы можете написать
string funcName = MethodBase.GetCurrentMethod().Name
Now, если вы хотите получить Имя функции, которая вызвала текущую функцию (т.е. вы хотите сделать это в одном месте в вашем функция ведения журнала), то единственным вариантом является чтение через StackFrame.