栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

日志切面d

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

日志切面d

1. 注解

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@documented
public @interface LogAnno {
    
    String description();
}

2.

package com.cignacmb.common.log.aspect;

import com.alibaba.fastjson.JSON;
import com.cignacmb.common.util.WebUtil;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;

@Slf4j
@Aspect
@Component
public class LogAnnotationAspect {

    public static final String expression = "@annotation(com.cignacmb.common.log.anno.LogAnno) || @within(com.cignacmb.common.log.anno.LogAnno)";

    @Pointcut(expression)
    public void logPointCut() {
    }

    @Around("logPointCut()")
    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
        HttpServletRequest request = null;
        try {
            ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
            request = attributes.getRequest();
        } catch (Exception e) {
            e.printStackTrace();
            log.info("非HTTP请求,无需格式化日志");
            String className = joinPoint.getSignature().getDeclaringTypeName();
            String methodName = joinPoint.getSignature().getName();
            Object[] methodArgs = joinPoint.getArgs();

            log.info(" ------------------------ [{}] method start ------------------------", methodName);

            
            log.info(" Method Args: {}", Arrays.toString(methodArgs));
            
            log.info(" Class&Method: {}#{}", className, methodName);

            long startTime = System.currentTimeMillis();

            Object result = joinPoint.proceed();

            long endTime = System.currentTimeMillis();

            
            log.info(" Method result: {}", JSON.toJSonString(result));

            
            log.info(" Time Consuming: {} ms", endTime - startTime);

            log.info(" ------------------------ [{}] method end ------------------------", methodName);

            return result;
        }

        
        String deviceId = request.getHeader("X-Device-Id");
        String version = request.getHeader("X-Request-Version");
        String platform = request.getHeader("X-Request-Platform");

        MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();

        String methodName = methodSignature.getName();

        String[] paramNames = methodSignature.getParameterNames();

        
        String userId = request.getHeader("userId");

        log.info("[ {} ] ------------------------ [{}] method start --------------------------", deviceId, methodName);

        log.info("[ {} ] deviceId:[{}],version:[{}],platform:[{}],userId:[{}]", deviceId, deviceId, version, platform, userId);

        
        log.info("[ {} ] Request Args: ParamName{} - ParamValue{}", deviceId, Arrays.toString(paramNames), Arrays.toString(joinPoint.getArgs()));
        
        log.info("[ {} ] Request method: {}", deviceId, request.getMethod());
        
        log.info("[ {} ] Request URL: {}", deviceId, request.getRequestURL().toString());
        
        log.info("[ {} ] IP Address: {}", deviceId, WebUtil.getIpAddress(request));
        
        log.info("[ {} ] User-Agent: {}", deviceId, request.getHeader("User-Agent"));
        
        log.info("[ {} ] Class&Method: {}#{}", deviceId, joinPoint.getSignature().getDeclaringTypeName(), methodName);

        long startTime = System.currentTimeMillis();

        Object result = joinPoint.proceed();

        long endTime = System.currentTimeMillis();

        
        log.info("[ {} ] Response result: {}", deviceId, JSON.toJSonString(result));

        
        log.info("[ {} ] Time Consuming: {} ms", deviceId, endTime - startTime);

        log.info("[ {} ] ------------------------ [{}] method end --------------------------", deviceId, methodName);

        return result;
    }
}

3.

package com.cignacmb.common.log.aspect;

import com.alibaba.fastjson.JSON;
import com.cignacmb.common.util.WebUtil;
import lombok.extern.slf4j.Slf4j;
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;



@Slf4j
@Component
public class LogMethodAspect implements MethodInterceptor {

    @Value("${spring.application.name}")
    private String applicationName;

    public Object invoke(MethodInvocation invocation) throws Throwable {
        HttpServletRequest request = null;
        try {
            ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
            request = attributes.getRequest();
        } catch (Exception e) {
            e.printStackTrace();
            log.info("非HTTP请求,无需格式化日志");
            String className = invocation.getMethod().getDeclaringClass().getName();
            String methodName = invocation.getMethod().getName();
            Object[] arguments = invocation.getArguments();

            log.info(" ------------------------ [{}] method start ------------------------", methodName);

            log.info(" Application Name: [{}]", applicationName);

            
            log.info(" Method Args: {}", Arrays.toString(arguments));
            
            log.info(" Class&Method: {}#{}", className, methodName);

            long startTime = System.currentTimeMillis();

            Object result = invocation.proceed();

            long endTime = System.currentTimeMillis();

            
            log.info(" Method result: {}", JSON.toJSonString(result));

            
            log.info(" Time Consuming: {} ms", endTime - startTime);

            log.info(" ------------------------ [{}] method end ------------------------", methodName);

            return result;
        }

        
        String deviceId = request.getHeader("X-Device-Id");
        String version = request.getHeader("X-Request-Version");
        String platform = request.getHeader("X-Request-Platform");

        String className = invocation.getMethod().getDeclaringClass().getName();
        String methodName = invocation.getMethod().getName();
        Object[] arguments = invocation.getArguments();

        
        String userId = request.getHeader("userId");

        log.info("[ {} ] ------------------------ [{}] method start ------------------------", deviceId, methodName);

        log.info("[ {} ] Application Name: [{}]", deviceId, applicationName);

        log.info("[ {} ] deviceId:[{}],version:[{}],platform:[{}],userId:[{}]", deviceId, deviceId, version, platform, userId);

        
        log.info("[ {} ] Request Args: {}", deviceId, JSON.toJSonString(arguments));
        
        log.info("[ {} ] Request method: {}", deviceId, request.getMethod());
        
        log.info("[ {} ] Request URL: {}", deviceId, request.getRequestURL().toString());
        
        log.info("[ {} ] IP Address: {}", deviceId, WebUtil.getIpAddress(request));
        
        log.info("[ {} ] User-Agent: {}", deviceId, request.getHeader("User-Agent"));
        
        log.info("[ {} ] Class&Method: {}#{}", deviceId, className, methodName);

        long startTime = System.currentTimeMillis();

        Object result = invocation.proceed();

        long endTime = System.currentTimeMillis();

        
        log.info("[ {} ] Response result: {}", deviceId, JSON.toJSonString(result));

        
        log.info("[ {} ] Time Consuming: {} ms", deviceId, endTime - startTime);

        log.info("[ {} ] ------------------------ [{}] method end ------------------------", deviceId, methodName);

        return result;
    }
}

4. 

package com.cignacmb.common.log.config;

import com.cignacmb.common.log.aspect.LogAnnotationAspect;
import com.cignacmb.common.log.aspect.LogMethodAspect;
import org.springframework.aop.aspectj.AspectJexpressionPointcutAdvisor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnexpression;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class LogAutoConfigure {

    @Value("${log.aspect.paths}")
    private String paths;

    
    @Bean
    public LogAnnotationAspect logAnnotationAspect() {
        return new LogAnnotationAspect();
    }

    
    @Bean
    @ConditionalOnProperty("log.aspect.paths")
    @ConditionalOnexpression("!'${log.aspect.paths}'.equals('')")
    public AspectJexpressionPointcutAdvisor configurableMethodAdvisor() {
        // 配置类路径切面表达式
        String pathexpression = buildAspectexpressionByPaths();

        AspectJexpressionPointcutAdvisor advisor = new AspectJexpressionPointcutAdvisor();
        String expressionBuilder = "(" + pathexpression + ")";
        advisor.setexpression(expressionBuilder);
        advisor.setAdvice(new LogMethodAspect());
        return advisor;
    }

    
    private String buildAspectexpressionByPaths() {
        if (paths == null || "".equals(paths)) {
            return "";
        }
        String[] pathArray = paths.split(",");
        StringBuilder pointCutBuilder = new StringBuilder();
        for (String path : pathArray) {
            pointCutBuilder.append(" || within(");
            pointCutBuilder.append(path);
            pointCutBuilder.append("..*)");
        }
        return pointCutBuilder.toString().replaceFirst(" \|\|", "");
    }
}

log:
  aspect:
    paths: com.cignacmb.claims.controller

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/571499.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号