package cn.cie.aop; import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.AfterThrowing; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; /** * Created by RojerAlone on 2017/6/8. * 日志记录,包括请求日志和错误日志 */ @Component @Aspect public class LogAspectj { private final Logger logger = Logger.getLogger(this.getClass()); @Before("execution(* cn.cie.controller.*Controller.*(..)) && !execution( * cn.cie.controller.AbstractController.*(..))") // 切面为controller中的所有方法 public void logAccess(JoinPoint joinPoint) { PropertyConfigurator.configure(this.getClass().getClassLoader().getResource("/").getPath() + "log4j-acc.properties"); ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = attributes.getRequest(); StringBuilder sb = new StringBuilder(); String token = ""; if (request.getCookies() != null && request.getCookies().length > 0) { for (Cookie cookie : request.getCookies()) { if (cookie.getName().equals("token")) { token = cookie.getValue(); } } } sb.append("token: " + token); sb.append("\tip: " + request.getRemoteAddr()); sb.append("\tmethod: " + request.getMethod()); sb.append("\turl: " + request.getRequestURI()); sb.append("\tparams: "); for (Object object : joinPoint.getArgs()) { if (object != null) { sb.append("\t" + object.getClass().getSimpleName() + " " + object.toString()); } } logger.info(sb.toString()); } @AfterThrowing(value = "execution(* cn.cie.controller.*Controller.*(..)) && !execution( * cn.cie.controller.AbstractController.*(..))", throwing = "e") // 切面为controller中的所有方法 public void errorAccess(Throwable e) { PropertyConfigurator.configure(this.getClass().getClassLoader().getResource("/").getPath() + "log4j-error.properties"); if (e instanceof Exception) { logger.error("", e); } } }