Я работал с кодовой базой компании, у которой есть политика написания большого количества протоколов трассировки. Так что почти каждый метод имеет кусок кода, который начинается следующим образом:
String LOG_METHOD = "nameOfMethod(String,List<Long>):void";
if(logger.isTraceEnabled()) {
Object[] params = new Object[] { string, list };
logger.trace(CompanyMessages.newMethodInstanceMessage(this, LOG_METHOD, params));
}
и заканчивайтесь так (либо в finally
-clause, либо только в конце метода:
if(logger.isTraceEnabled()) {
logger.trace(CompanyMessages.leaveMethodInstanceMessage(this, LOG_METHOD));
}
На самом деле у него больше кода, но это основная идея.
Это загромождает код, и другие кодеры постоянно испортили его своими интерпретациями, которые не используют конкретный класс CompanyMessages
, который необходим для форматирования сообщений, которые будут прочитаны средствами мониторинга. Поэтому я ищу способ избавиться от всего вышеприведенного кода и просто предоставить все методы, требующие отслеживания трассировки с аннотациями вроде: @LogBefore('logLevel')
и @LogAfter('logLevel')
.
Причина, по которой я выбираю это решение, - это сделать так, чтобы другим разработчикам не нужно было ничего чему-то научиться, кроме как использовать аннотации вместо кода. Я работаю в среде сервера, в которой мы развертываем сотни веб-приложений и десятки разработчиков. Поэтому я искал способ реализовать это в веб-приложении без большого количества дополнительного кодирования или дополнительных больших библиотек. Это означает, что я ищу небольшую стабильную реализацию АОП, используя аннотации, подобные тем, которые я предложил, легко настраиваемые в каждом веб-приложении. Производительность также важна. Каков самый простой пример для реализации этого с помощью АОП?
Изменить: я нашел нечто очень похожее на то, что я ищу, но у этого есть пара проблем. Все классы, требующие ведения журнала, должны быть настроены, что будет более ресурсоемким, чем просто использование аннотаций. Будет ли конфигурация spring <aop:aspectj-autoproxy/>
исправить это?