Spring: Standard Logging aspect (interceptor)
I've found a lot of examples on how to create a custom aspect for logging using the Spring framework like this or this but did not find standard/comm开发者_JAVA百科on Spring implementation for this situation and question. Are there any standard implementations of logging aspect from Spring or not?
Yes there are!
<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>
Check out the CustomizableTraceInterceptor API, you can define separate enter/exit/exception messages with several placeholders:
$[methodName]
- replaced with the name of the method being invoked$[targetClassName]
- replaced with the name of the class that is the target of the invocation$[targetClassShortName]
- replaced with the short name of the class that is the target of the invocation$[returnValue]
- replaced with the value returned by the invocation$[argumentTypes]
- replaced with a comma-separated list of the short class names of the method arguments$[arguments]
- replaced with a comma-separated list of the String representation of the method arguments$[exception]
- replaced with the String representation of any Throwable raised during the invocation$[invocationTime]
- replaced with the time, in milliseconds, taken by the method invocation
Here are the list of frameworks that do logging via AOP:
http://aspect4log.sf.net - does very nice looking logging via slf4j and @Log annotation. Can work via SpringAOP, and AspectJ. With AspectJ it works even for private methods and constructors and does not require a class to be a Spring Bean. Very easy to use, i was able to make it running with my project within 5 min.
http://loggifier.unkrig.de - does logging via java.util.logging, a bit too complex and not that well document but claims that it can instrument already compiled jar/war/ear files!
AbstractTraceInterceptor (from SpringAOP) and it's subclasses SimpleTraceInterceptor and CustomizableTraceInterceptor. Logging configuration is done separately from classes. Logs via commons-logging. Since it is designed for SpringAOP you have to work with Spring Beans (and only with Spring Beans public methods).
精彩评论