Мы использовали 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
ram 18 Дек 2009 в 17:06

2 ответа

Лучший ответ

Вы хотите сказать, что большинство / все ваши методы принимают эту структуру? Если это так, я бы посоветовал снизить уровень регистрации. (Подчеркиваю, что это совет, а возможно, и спорный совет).

На самом деле не должно быть необходимости использовать общий журнал входа и выхода каждого отдельного метода таким образом, вместо этого размещайте записи в журнале более стратегически. Мне нравится следить за тем, чтобы все сообщения журнала имели «цель» - если я не могу придумать сценарий, в котором это сообщение журнала могло бы помочь или помочь мне каким-либо образом во время отладки, тогда оно не имеет никакого отношения к моему коду!

2
Justin 18 Дек 2009 в 17:30

Вы можете прочитать это , также прочтите 7 подходов для АОП в .Net , я использую АОП в Java и не заметил проблем с производительностью. В любом случае проверьте здесь, чтобы быть осторожными ... .

Дополнительно
Spring.Net AOP

2
Community 23 Май 2017 в 15:30