Comments 8
Если нужно какие-то зависимости, свойства и т.п. добавить сразу во все проекты в солюшне, можно просто добавить один .props файл (например, его часто используют для добавления анализаторов исходного кода).
https://learn.microsoft.com/en-us/visualstudio/msbuild/customize-by-directory
Попробуйте статический класс логгера создать, создание сервисов руками - плохая практика.
BeforeExecution, afterExecution - да, здоро что есть логирование времени исполнения, но это лучше вынести в Debug (#if DEBUG ... #endif). Начал дебажить - смотри сколько какой метод исполняется.
Да и в общем, в VisualStudio есть профилирование, скорее всего эти отметки по времени ничего не дадут. (а метод может быть вызван и 1м раз в минуту :) )
В код толком не вникал, но если я правильно понимаю, и этот вариант, и вариант из первой статьи основаны на reflection. Отсюда сразу вопрос: а сколько времени занимает собственно это автоматическое логирование? При какой частоте вызовов это становится проблемой? Или тут все делается в начале, а потом идут чистые оберточные вызовы?
Fody - работа с IL готовой сборки.
Логирование начала конца метода сделано зря.
System.Reflection тут нет.
Эээ... Это не очень поясняет, но ладно.
120 мс выполнение тестов с логированием через MethodBoundaryAspect
100 мс выполнение тестов с логированием через Reflection
070 мс выполнение тестов без логирования
В документации у MethodBoundaryAspect.Fody есть цифры по влиянию логирования, почитайте, что пишут разработчики.
Логирование через Reflection более гибкое, но приходиться создавать обёртку, и каждый метод для логирования приходиться добавлять в интерфейс.
Логирование через MethodBoundaryAspect.Fody даёт возможность логировать приватные методы, но приходиться каждый метод отмечать атрибутом.
Пока позволяет логика логирования пользуемся MethodBoundaryAspect.Fody, когда гибкости перестаёт хватать переписываем на Reflection.
А нахера логировать вызовы методов? Видел в жизни слишком много идиотского кода где буквально каждый метод был обернут в log(Begin ...")
/log("End ...")
и еще довесок и в try/catch
, причем, часто был обернут и сам метод и его вызовы. Больший идиотизм и придумать сложно.
C#, Логи которые пишут себя сами, 2