Мы использовали log4net для регистрации в нашем приложении веб-форм asp.net. Наше ведение журнала обычно находится на нашем бизнес-уровне, и типичная реализация выглядит следующим образом
SomeMethodCall(MethodParams)
{
Log.Start("Starting Some Method");
try
{
//do something
}
catch(Exception ex)
{
Log.Exception("exception in SomeMethodCall" + ex.message);
}
Log.End("End SomeMethod");
}
На мой взгляд, это немного коряво. Есть ли более чистый способ сделать это без использования АОП? Я не уверен, что мне понадобятся накладные расходы на добавление фреймворка только для ведения журнала, думал, что понимаю, что это даст мне много других вариантов (что я делаю не нужно)
Я думаю об использовании некоторых фреймворков АОП, чтобы сделать это более чистым способом, просто пометив методы атрибутами для регистрации и обработки исключений.
Есть 2 вещи, которые меня беспокоят в АОП (после первого чтения).
Некоторые фреймворки вводят код в ваш IL (в соответствии с моим пониманием), и я обеспокоен, если это введет меня в заблуждение. Возможно, я смотрю на строку x, заданную моей структурой АОП, а на самом деле это может быть строка y в моем приложении. Мои опасения необоснованны?
Производительность: сколько накладных расходов на производительность будет добавлено при использовании структуры АОП.
Изменить: я также изучал PolicyInjectionApplicationBlock . К сожалению, у меня нет возможности изменять реализации внутри моей бизнес-логики.
2 ответа
Вы хотите сказать, что большинство / все ваши методы принимают эту структуру? Если это так, я бы посоветовал снизить уровень регистрации. (Подчеркиваю, что это совет, а возможно, и спорный совет).
На самом деле не должно быть необходимости использовать общий журнал входа и выхода каждого отдельного метода таким образом, вместо этого размещайте записи в журнале более стратегически. Мне нравится следить за тем, чтобы все сообщения журнала имели «цель» - если я не могу придумать сценарий, в котором это сообщение журнала могло бы помочь или помочь мне каким-либо образом во время отладки, тогда оно не имеет никакого отношения к моему коду!
Вы можете прочитать это , также прочтите 7 подходов для АОП в .Net , я использую АОП в Java и не заметил проблем с производительностью. В любом случае проверьте здесь, чтобы быть осторожными ... .
Дополнительно
Spring.Net AOP
Похожие вопросы
Связанные вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.