利用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)

结果

这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值