package com.hehenian.biz.service.log.impl; import org.apache.log4j.Logger; import org.aspectj.lang.ProceedingJoinPoint; import org.springframework.stereotype.Component; import org.springframework.util.StopWatch; import com.hehenian.biz.common.exception.BusinessException; @Component("logService") public class LogServiceImpl { private final Logger logger = Logger.getLogger(this.getClass()); public Object around(ProceedingJoinPoint joinPoint) throws Throwable { StopWatch stopWatch = new StopWatch(); try { stopWatch.start(); Object retVal = joinPoint.proceed(); stopWatch.stop(); logger.info(getLogMessage(joinPoint, stopWatch.getTotalTimeMillis())); return retVal; } catch (BusinessException e) { stopWatch.stop(); logger.info(getLogMessage(joinPoint, stopWatch.getTotalTimeMillis())); logger.error(e.getMessage(), e); } catch (Throwable e) { stopWatch.stop(); logger.info(getLogMessage(joinPoint, stopWatch.getTotalTimeMillis())); logger.error(e.getMessage(), e); } return null; } /** * 获取日志消息 * * @param joinPoint * @param totalTimeMillis * @return */ private String getLogMessage(ProceedingJoinPoint joinPoint, Long totalTimeMillis) { StringBuffer logMessage = new StringBuffer(); try { logMessage.append(joinPoint.getTarget().getClass().getName()); logMessage.append("."); logMessage.append(joinPoint.getSignature().getName()); logMessage.append("("); // append args Object[] args = joinPoint.getArgs(); for (int i = 0; i < args.length; i++) { logMessage.append(args[i]).append(","); } if (args.length > 0) { logMessage.deleteCharAt(logMessage.length() - 1); } logMessage.append(")"); logMessage.append(" execution time: "); logMessage.append(totalTimeMillis); logMessage.append(" ms"); } catch (Exception e) { logger.error(e.getMessage(), e); } return logMessage.toString(); } }