Я нашел множество примеров того, как создать пользовательский аспект для ведения журнала с использованием инфраструктуры Spring, например this или this, но не нашел стандартную/общую реализацию Spring для этой ситуации и вопроса. Существуют ли какие-либо стандартные варианты ведения журнала с Spring или нет?
Spring: стандартный аспект ведения журнала (перехватчик)
Ответ 1
Да, есть!
<bean id="customizableTraceInterceptor" class="org.springframework.aop.interceptor.CustomizableTraceInterceptor">
<property name="enterMessage" value="Entering $[methodName]($[arguments])"/>
<property name="exitMessage" value="Leaving $[methodName](): $[returnValue]"/>
</bean>
<aop:config>
<aop:advisor advice-ref="customizableTraceInterceptor" pointcut="execution(public * BankAccountServlet.*(..))"/>
</aop:config>
Ознакомьтесь с CustomizableTraceInterceptor API, вы можете определить отдельные сообщения ввода/выхода/исключения с несколькими заполнителями:
$[methodName]
- заменено именем вызываемого метода$[targetClassName]
- заменено именем класса, являющегося целью вызова$[targetClassShortName]
- заменить короткое имя класса, являющегося целью вызова$[returnValue]
- заменяется значением, возвращаемым вызовом$[argumentTypes]
- заменен разделенным запятыми список коротких имен классов аргументов метода$[arguments]
- заменен разделенным запятыми списком строкового представления аргументов метода$[exception]
- заменено строковым представлением любого Throwable, поднятого во время вызова$[invocationTime]
- заменяется временем, в миллисекундах, взятым вызовом метода
Ответ 2
Вот список фреймворков, которые регистрируются через AOP:
http://aspect4log.sf.net - очень приятный просмотр протоколов через slf4j и @Log аннотацию. Может работать через SpringAOP и AspectJ. С AspectJ он работает даже для частных методов и конструкторов и не требует, чтобы класс был Spring Bean. Очень прост в использовании, я смог заставить его работать с моим проектом в течение 5 минут.
http://loggifier.unkrig.de - ведет журнал через java.util.logging, немного слишком сложный и не очень хорошо документирует, но утверждает, что он может использовать инструмент уже скомпилированные файлы jar/war/ear!
AbstractTraceInterceptor (из SpringAOP), и он подклассы SimpleTraceInterceptor и CustomizableTraceInterceptor. Конфигурация регистрации выполняется отдельно от классов. Журналы через commons-logging. Поскольку он предназначен для SpringAOP, вам нужно работать с Spring Beans (и только с общедоступными методами Spring Beans).