All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.gitee.fufu669.aspect.LogAspect Maven / Gradle / Ivy

There is a newer version: 6.666.66021
Show newest version
package com.gitee.fufu669.aspect;

import com.gitee.fufu669.utils.CacheJsonUtil;
import io.swagger.annotations.ApiOperation;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.reflect.MethodSignature;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Enumeration;

@Aspect
@Component
@SuppressWarnings({"rawtypes"})
/** @author wangfupeng */
public class LogAspect {

    public static final Logger logger = LoggerFactory.getLogger(LogAspect.class);
    
    private static String CONTENT_TYPE="Content-Type";
    
    @Autowired
    private HttpServletRequest request;

    @Around("within(com.gitee.fufu669.aspect.Logging+)")
    public Object logger(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
        long begin = System.currentTimeMillis();
        String methodDescription = "NONE";
        Method method = ((MethodSignature) proceedingJoinPoint.getSignature()).getMethod();
        for (Annotation annotation : method.getAnnotations()) {
            if (annotation instanceof ApiOperation) {
                methodDescription = ((ApiOperation) annotation).value();
            }
        }

        StringBuilder sb = new StringBuilder("\n%%%%%%%%%%%%【")
                .append(methodDescription).append(" ")
                .append(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()))
                .append("】 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n");

        sb.append("Controller  : ").append(proceedingJoinPoint.getTarget().getClass().getSimpleName()).append("\n");
        sb.append("Method      : ").append(request.getMethod()).append("\n");

        String uri = request.getRequestURI();
        if (uri != null) {
        	sb.append("URL         : ").append(uri).append("\n");
        }

        if (request.getHeader(CONTENT_TYPE) != null
                && request.getHeader(CONTENT_TYPE).equals(MediaType.APPLICATION_JSON_VALUE)
                && !"GET".equals(request.getMethod())) {
            Object[] args = proceedingJoinPoint.getArgs();
            if (args.length > 0) {
                for (Object arg : args) {
                    sb.append("PostArg     : ").append(arg).append("\n");
                }
            }
        }

        Enumeration e = request.getParameterNames();
        if (e.hasMoreElements()) {
            sb.append("Parameter   : ");
            while (e.hasMoreElements()) {
                String name = e.nextElement();
                String[] values = request.getParameterValues(name);
                if (values.length == 1) {
                    sb.append(name).append("=").append(values[0]);
                } else {
                    sb.append(name).append("[]={");
                    for (int i = 0, length = values.length; i < length; i++) {
                        if (i > 0) {
                        	sb.append(",");
                        }
                        sb.append(values[i]);
                    }
                    sb.append("}");
                }
                sb.append(" ");
            }
            sb.append("\n");
        }
        
        logger.info("\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%---调用之前---%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"+sb.toString()+"%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%------%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n");
        Object response = proceedingJoinPoint.proceed();

        if (response == null) {
        	sb.append("return      : ").append("null").append("\n");
        }
        else {
        	sb.append("return      : ").append(CacheJsonUtil.toJson(response)).append("\n");
        }
        sb.append("tcost       : ").append(System.currentTimeMillis() - begin).append("ms").append("\n");
        sb.append("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n");
        logger.info("\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%---调用之后---%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"+sb.toString());
        return response;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy