利用Spring AOP进行日志管理

利用Spring AOP进行日志管理

本Markdown编辑器使用[StackEdit][6]修改而来,用它写博客,将会带来全新的体验哦:

  • 注解类BussAnnotation
  • 方式1:XML配置方式
  • 方式2:代码配置方式
  • 使用
  • 结果

注解类BussAnnotation

@Target({ ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface BussAnnotation
{
    // 模块名
    String moduleName() default "";

    // 操作内容
    String option() default "";
}

方式1:XML配置方式

提示:若想要AOP切面在controller层,必须要在spring-servlet.xml中配置

<aop:aspectj-autoproxy />
<bean id="logUtil" class="com.asb.farmermarket.util.LogUtilForXml"></bean>
<!-- 强制使用cglib代理,如果不设置,将默认使用jdk的代理,但是jdk的代理是基于接口的 -->
<aop:config proxy-target-class="true" />
<aop:config>
    <aop:aspect id="myAspect" ref="logUtil">
        <aop:pointcut id="logPointCut" expression="execution(* com.asb.farmermarket.controller..*.*(..)) and @annotation(annotation) and args(object,..)" />
        <aop:before method="before" pointcut-ref="logPointCut" arg-names="annotation,object"/>
    </aop:aspect>
</aop:config>

LogUtilForXml.java

public class LogUtilForXml
{
    Logger logger = Logger.getLogger(LogUtilForXml.class);

    public void before(JoinPoint jp, BussAnnotation annotation, Object object)
    {
        logger.info("======moduleName:" + annotation.moduleName());
        logger.info("======option:" + annotation.option());

        String methodName = jp.getSignature().getName();
        logger.info(jp.getTarget().getClass().getName() + "---" + methodName);

        Object[] args = jp.getArgs();
        for(int i = 0;i<args.length;i++)
        {
            if (args[i] != null)

            logger.info("params[" + i + "]" + args[i].toString());
        }
    }
}

方式2:代码配置方式

<context:component-scan base-package="com.asb.farmermarket.util"/>
<aop:aspectj-autoproxy />
@Aspect
@Component
public class LogUtilForCode
{
    Logger logger = Logger.getLogger(LogUtilForCode.class);

    @Pointcut(value = "execution(* com.asb.farmermarket.controller..*.*(..))")
    public void pointcut1()
    {
    }

    @Before(value = "pointcut1() && @annotation(annotation) && args(object,..) ", argNames = "annotation,object")
    public void before(JoinPoint jp, BussAnnotation annotation, Object object) throws Throwable
    {
        logger.info("======moduleName:" + annotation.moduleName());
        logger.info("======option:" + annotation.option());

        String methodName = jp.getSignature().getName();
        logger.info(jp.getTarget().getClass().getName() + "---" + methodName);

        Object[] args = jp.getArgs();
        for(int i = 0;i<args.length;i++)
        {
            if (args[i] != null)

            logger.info("params[" + i + "]" + args[i].toString());
        }
    }
}

使用

@BussAnnotation(moduleName="经营户管理", option="经营户备案查询")
@RequestMapping("findList")
@ResponseBody
public Object findList(HttpServletRequest request, BaseBusinessInfo entity, Pager pager, String businessType2)

结果

这里写图片描述

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页