Я создаю простой метод логирования (ничего особенного) для операторов try / catch. Я хочу включить имя класса и метод, где было сгенерировано исключение.
Существует два разных способа получения информации. Один использует MethodBase.GetCurrentMethod()
и исключение TargetSite
.
Я знаю, что MethodBase может добавить проблему с производительностью, но будет совершенно незначительным для обычных операторов try / catch.
Я также понять, что оба могут иметь нулевые значения. Мой вопрос , какой процесс является предпочтительным, есть ли какие-либо недостатки или имеет ли это значение ?
Вот мой код, получающий оба
public static void LogError(Exception exp, MethodBase method)
{
var methodName = method.Name;
var className = (method.ReflectedType != null) ? method.ReflectedType.Name : "";
var methodName2 = exp.TargetSite!= null ? exp.TargetSite.Name : "";
var className2 = (exp.TargetSite != null && exp.TargetSite.DeclaringType != null) ? exp.TargetSite.DeclaringType.Name : "";
// do more stuff
}
Вот вызов метод
AuditDbContext.LogError(ex, MethodBase.GetCurrentMethod());
Если я использую TargetSite, я не передам в MethodBase (конечно).
ОБНОВЛЕНИЕ:
Включить информацию о вызывающем абоненте в качестве дополнительного возможного выбора. Спасибо Ллиар за комментарий.