Подтвердить что ты не робот

Традиционное ведение журнала и регистрация АОП

Я начинаю этот новый проект, и мы избиваем наш подход к регистрации/отладке, и я хотел задать вопрос остальным из вас на SO, учитывая

private final static Logger logger = LoggerFactory.getLogger(getClass());
...
public void doSumething(){
...
if(logger.isDebugEnabled())
    logger.debug("...");
}

или

 @After("execution(* *.doSomething())")
    public void logAfter(JoinPoint jp){
        logger.debug("...");
    }

Действительно ли подход AOP лучше, чем при использовании традиционного подхода? Или AOP превосходит в конкретном случае использования для регистрации/профилирования?

4b9b3361

Ответ 1

Для производительности, подход AOP, безусловно, имеет небольшие накладные расходы против традиционного.

Одна из многих преимуществ АОП заключается в том, что она позволяет отделить свои нерыночные проблемы от вашей бизнес-логики. Это также помогает вам в мирских задачах, таких как логика ведения журнала в каждом из ваших методов или размещение инструкции try-catch для каждого метода.

Я думаю, что реальная проблема заключается в том, что если накладные расходы на производительность (в моем опыте, который является минимальным), это компенсирует мирские задачи, которые вы должны пройти во время разработки.

Один из друзей сказал мне, что лучше иметь более медленное приложение, которое можно обслуживать и масштабировать, чем иметь более быстрое приложение, которое даст вам ад в обслуживании. Медленность может быть компенсирована многими способами, такими как модернизация оборудования и т.д.

Это всего лишь мои два цента, надеюсь, что это поможет.

Ответ 2

Я не думаю, что их следует рассматривать как взаимоисключающие альтернативы.

Я думаю, что AOP отлично подходит для трассировки (т.е. ввода/выхода метода ведения журнала) и значений параметров.

Я все еще использую регулярный журнал:

  • Информация/Предупреждение/Сообщения об ошибках
  • Для отладочных сообщений во время разработки, чтобы увидеть значение определенных переменных или посмотреть, какой из путей if/then используется и т.д.

Ответ 3

Я полностью нашел аспектно-ориентированный подход. Он чувствует себя правильно, чтобы отделить регистрацию от логики. Однако я не уверен в производительности.

Даже если вы решите не идти с AOP, есть более эффективные способы ведения журнала, чем это:

если (logger.isDebugEnabled())

Посмотрите на log4j, который позволит вам изменять уровни журналов, разные приложения и многое другое.

Ответ 4

Я согласен с ответом @daxsorbito - и хотел бы возвысить над этим.

  • Совет по перекрестному разрешению может быть сконфигурирован с использованием конфигурационных файлов таким образом, чтобы вы могли иметь разные рекомендации для ведения журнала. Это может повысить производительность.

  • AOP Может уменьшить количество беспорядков кода и побудить разработчиков сосредоточиться на основной задаче.

  • Большая часть отладки становится проще, если код имеет достаточную регистрацию. AOP делает его независимым от разработчика. Некоторые разработчики могут не следовать дисциплине регистрации достаточно. Или может чувствовать это ненужным.

  • Файл журнала имеет согласованные сообщения. (не более "вы говорите, картофель, я говорю batata...:)" ). Каждый разработчик может записывать его в другом стиле. Однако, если мы будем использовать AOP-fy, вы можете сделать его согласованным в приложении и легко положить на него много хорошего аналитика.

  • Это также побуждает вас писать небольшие методы повторного использования (и даже лучше, если они иногда проверяются), которые можно легко отладить.

  • Иногда это также побуждает вас следовать согласованным соглашениям об именах, поскольку это облегчит применение советов для регистрации этих методов во время отладки.