package ee.telekom.workflow.util;
import java.lang.invoke.MethodHandles;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Writes a DEBUG log entry after every ee.telekom.workflow package @Service class public method call.
* The row contains the elapsed milliseconds and an exception message if thrown.
*
* @author Erko Hansar
*/
@Aspect
public class StatisticsLoggingAspect{
private static final Logger log = LoggerFactory.getLogger( MethodHandles.lookup().lookupClass() );
@Pointcut("execution(public * ee.telekom.workflow..*(..))")
public void publicWorkflowMethod(){
}
@Around("publicWorkflowMethod() && @within(org.springframework.stereotype.Service)")
public Object aroundServiceMethod( ProceedingJoinPoint pjp ) throws Throwable{
long start = System.currentTimeMillis();
Throwable error = null;
try{
return pjp.proceed();
}
catch( Throwable t ){
error = t;
throw t;
}
finally{
if( log.isDebugEnabled() ){
long elapsed = System.currentTimeMillis() - start;
log.debug( pjp.toShortString() + " took " + elapsed + " ms" + (error != null ? ", exception: " + error : "") );
}
}
}
}