xml中配置
<bean id="logAspect" class="com.xinli.log.LogAspect"></bean>
<aop:config>
<!-- 切入点 -->
<aop:pointcut
expression="execution(* com.xinli.webapp.action.*.*(..)) && !execution(* com.xinli.webapp.action.MainTreeAction.*(..))"
id="myPointcut" />
<!-- 切面: 将哪个对象中的哪个方法,织入到哪个切入点 -->
<aop:aspect id="myAspect" ref="logAspect">
<!-- 前置通知 -->
<aop:before method="doBefore" pointcut-ref="myPointcut" />
<!-- <aop:after method="doAfter" pointcut-ref="myPointcut"/> -->
<aop:after-returning method="doAfterReturning" returning="returnObj" pointcut-ref="myPointcut"/>
</aop:aspect>
</aop:config>
applicationContext-log.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"
default-lazy-init="true">
<!-- <context:component-scan base-package="com.xinli.log">
<context:include-filter type="annotation"
expression="org.aspectj.lang.annotation.Aspect"/>
</context:component-scan>
<aop:aspectj-autoproxy/> -->
<!-- Activates scanning of @Autowired -->
<context:annotation-config/>
<!-- Activates scanning of @Repository -->
<context:component-scan base-package="com.xinli.log">
<context:include-filter type="annotation"
expression="org.aspectj.lang.annotation.Aspect"/>
</context:component-scan>
<aop:aspectj-autoproxy/>
</beans>
LogAspect.java
package com.xinli.log;
import java.util.Arrays;
import java.util.Enumeration;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.annotation.Order;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.util.Assert;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import com.xinli.model.User;
@Aspect
@Order(1)
public class LogAspect {
private String execution="execution(* com.xinli.webapp.action.*.*(..)) "
+ "&& !execution(* com.xinli.webapp.action.MainTreeAction.*(..))"
+ "&& !execution(* com.xinli.webapp.action.LogoutAction.*(..))";
private final Logger logger = LoggerFactory.getLogger(this.getClass());
/**
* 给所有的controller方法上添加操作日志
*/
@Pointcut(value="execution(* com.xinli.webapp.action.*.*(..)) && !execution(* com.xinli.webapp.action.MainTreeAction.*(..))")
// @Pointcut(value="execution(* com.xinli.service.impl.*.*(..)) && !execution(* com.xinli.service.impl.UserManagerImpl.*(..))")
// @Pointcut(value="execution(* com.xinli.service.impl.*.*(..))")
// @Pointcut ("execution(* com.xinli.webapp.action.*.*(..)) && !execution(* com.xinli.webapp.action.MainTreeAction.*(..))")
public void controllerAspect() {}
@Before("controllerAspect()")
public void doBefore(JoinPoint joinPoint) {
System.out.println("我是doBefore方法!!!");
if(logger.isTraceEnabled()){
logger.trace("doBefore()");
}
// ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
// HttpServletRequest request = attributes.getRequest();
// Signature signature = joinPoint.getSignature();
// SecurityContext ctx = SecurityContextHolder.getContext();
//
// User user = (User) ctx.getAuthentication().getPrincipal();
//
// if(logger.isTraceEnabled()){
// logger.trace("LOGIN USER NAME : {}",user.getUsername());
// logger.trace("URL : {}",request.getRequestURL().toString());
// logger.trace("HTTP_METHOD : {}",request.getMethod());
// logger.trace("IP : {}",request.getRemoteAddr());
// logger.trace("CLASS_METHOD : {}.{}",signature.getDeclaringTypeName(),signature.getName());
// logger.trace("ARGS : {}",Arrays.toString(joinPoint.getArgs()));
// printLog(request);
// }
// if(logger.isInfoEnabled()){
// logger.info("LOGIN USER NAME : {}",user.getUsername());
// logger.info("CLASS_METHOD : {}.{}",signature.getDeclaringTypeName(),signature.getName());
// logger.info("ARGS : {}",Arrays.toString(joinPoint.getArgs()));
// printLog(request);
// }
// if(logger.isWarnEnabled()){
// logger.warn("LOGIN USER NAME : {}",user.getUsername());
// logger.warn("CLASS_METHOD : {}.{}",signature.getDeclaringTypeName(),signature.getName());
// }
}
// @AfterReturning(pointcut="controllerAspect()",returning="returnObj")
// public void doAfterReturning(Object returnObj){
//
// if(logger.isTraceEnabled()){
// logger.trace("doAfterReturning()");
// logger.trace("RETURN RESULT : {}",returnObj.toString());
// }
// if(logger.isInfoEnabled()){
// logger.info("RETURN RESULT : {}",returnObj.toString());
// }
// }
/*@After("controllerAspect()")
public void doAfter(JoinPoint point){
if(logger.isTracabled()){
logger.trace("doAfter()");
}
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletResponse response= attributes.getResponse();
if(logger.isWarnEnabled()){
logger.warn("RESPONSE : {}",response.toString());
logger.warn("RESPONSE STATUS: {}",response.getStatus());
}
//有参无返回值的方法
//此方法返回的是一个数组,数组中包括request以及ActionCofig等类对象
Object[] args = point.getArgs();
System.out.println("目标参数列表:");
if (args != null) {
for (Object obj : args) {
System.out.println(obj + ",");
}
System.out.println();
}
}*/
private void printLog(HttpServletRequest request){
Assert.notNull(request);
//获取所有参数方法:
Enumeration<String> enu = request.getParameterNames();
while (enu.hasMoreElements()) {
String paraName = enu.nextElement();
logger.trace("ARG : {}={}",paraName,request.getParameter(paraName));
}
}
}