com.jmmd.common.shared.aspect.CommonLogger.java Source code

Java tutorial

Introduction

Here is the source code for com.jmmd.common.shared.aspect.CommonLogger.java

Source

/*
 * Copyright (c) 2014, lingang.chen@gmail.com  All Rights Reserved.
 * Licensed under the Apache License, Version 2.0 (the "License");
 */
package com.jmmd.common.shared.aspect;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import com.jmmd.common.utils.annotation.AspectLogger;

/**
 * Reason:    .
 * 
 * @author chenlg
 * @version $Id: CommonAspect.java, v 0.1 2014224 ?4:23:02 chenlg Exp $
 * @since    JDK 1.7
 */

@Component
@Aspect
public class CommonLogger {

    private static Logger logger = LoggerFactory.getLogger("COMMON_ASPECT_DIGEST");

    /** 
     *  
     */
    @Pointcut("execution(*  com.jmmd.common.service.response..*.*(..)) ")
    public void commonPointcut() {
        // pointcut?Annotation?pointcut  
    }

    /**
     * .
     * 
     * @param jionpoint
     * @param e
     */
    @AfterThrowing(pointcut = "commonPointcut() &&  @annotation(aspectLogger)", throwing = "e")
    public void throwingAdvice(JoinPoint jionpoint, AspectLogger aspectLogger, Exception e) {
        /*
         * ???.  
         */
        String targetClassName = jionpoint.getTarget().getClass().getName();
        /*
         * ???.
         */
        String targetMethodName = jionpoint.getSignature().getName();
        /*
         * ??.
         */
        String desc = aspectLogger.value();
        /*
         * ?.
         */
        StringBuilder aspectMessage = new StringBuilder();

        aspectMessage.append("[]:(").append(desc).append("),(").append(targetClassName)
                .append(".").append(targetMethodName).append(")").append(",?()");

        /*
         * .
         */
        logger.info(aspectMessage.toString());
    }

    /**
     * .
     * 
     * @param jionpoint
     * @return
     * @throws Throwable
     */
    @Around("commonPointcut() &&  @annotation(aspectLogger)")
    public Object aroundAdvice(ProceedingJoinPoint jionpoint, AspectLogger aspectLogger) throws Throwable {
        /*
         * .
         */
        long l1 = System.currentTimeMillis();
        /*
         * ??.
         */
        String desc = aspectLogger.value();
        /*
         * ???.  
         */
        String targetMethodName = jionpoint.getSignature().getName();
        /*
         * ???.
         */
        String targetClassName = jionpoint.getTarget().getClass().getName();
        /*
         * ?.
         */
        Object o = jionpoint.proceed();
        /*
         * ?.
         */
        long l2 = System.currentTimeMillis();
        /*
         * ?.
         */
        StringBuilder aspectMessage = new StringBuilder();

        aspectMessage.append("[]:(").append(desc).append("),(").append(targetClassName)
                .append(".").append(targetMethodName).append("),(").append((l2 - l1)).append("ms)")
                .append(",?()");

        /*
         * .
         */
        logger.info(aspectMessage.toString());

        return o;
    }
}