001    package com.hs.mail.aop;
002    
003    import org.apache.log4j.Logger;
004    import org.aspectj.lang.ProceedingJoinPoint;
005    import org.springframework.util.StopWatch;
006    import org.springframework.util.StringUtils;
007    
008    public class SimpleProfiler {
009    
010            protected Logger logger = Logger.getLogger(getClass());
011    
012            protected String logName = null;
013            
014            public void setLogName(String logName) {
015                    this.logName = logName;
016            }
017            
018            public Object profile(ProceedingJoinPoint call) throws Throwable {
019                    if (logger == null) {
020                            synchronized (this) {
021                                    logger = Logger.getLogger((logName != null) ? logName
022                                                    : getClass().getName());
023                            }
024                    }
025                    StopWatch clock = new StopWatch(call.toShortString());
026                    clock.setKeepTaskList(false);
027                    clock.start();
028                    try {
029                            return call.proceed();
030                    } finally {
031                            clock.stop();
032                            logger.info(shortSummary(call, clock));
033                    }
034            }
035            
036            private String shortSummary(ProceedingJoinPoint call, StopWatch clock) {
037                    return call.toShortString() + ": running time (millis) = "
038                                    + clock.getTotalTimeMillis() + " {"
039                                    + StringUtils.arrayToCommaDelimitedString(call.getArgs()) + "}";
040            }
041            
042    }