首页 > 其他分享 >controller方法入参出参加日志打印

controller方法入参出参加日志打印

时间:2023-09-14 14:24:00浏览次数:50  
标签:lang return Log controller org import 日志 annotation 参出

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
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 java.lang.reflect.Method;

@Aspect
@Component
@Slf4j
public class LogAspect {

    private static final String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";

    @Pointcut("@annotation(org.cango.bop.util.Log)")
    public void serviceLog() {
    }

    @Around("serviceLog()")
    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
        Method method = signature.getMethod();
        Class<?> targetClass = method.getDeclaringClass();

        StringBuilder classAndMethod = new StringBuilder();

        Log classAnnotation = targetClass.getAnnotation(Log.class);
        Log methodAnnotation = method.getAnnotation(Log.class);

        if (classAnnotation != null) {
            if (classAnnotation.ignore()) {
                return joinPoint.proceed();
            }
            classAndMethod.append(classAnnotation.value()).append("-");
        }

        if (methodAnnotation != null) {
            if (methodAnnotation.ignore()) {
                return joinPoint.proceed();
            }
            classAndMethod.append(methodAnnotation.value());
        }

        String target = targetClass.getName() + "#" + method.getName();
        String params = JSON.toJSONStringWithDateFormat(joinPoint.getArgs(), DATE_TIME_PATTERN, SerializerFeature.WriteMapNullValue);

        log.info("{} 开始调用--> {} 参数:{}", classAndMethod, target, params);

        long start = System.currentTimeMillis();
        Object result = joinPoint.proceed();
        long timeConsuming = System.currentTimeMillis() - start;

        log.info("{} 调用结束<-- {} 返回值:{} 耗时:{}ms", classAndMethod, target, JSON.toJSONStringWithDateFormat(result, DATE_TIME_PATTERN, SerializerFeature.WriteMapNullValue), timeConsuming);
        return result;
    }

}


import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Log {

    /**
     * log 说明
     *
     * @return
     */
    String value() default "";

    /**
     * 是否忽略,比如类上面加的有注解,类中某一个方法不想打印可以设置该属性为 true
     *
     * @return
     */
    boolean ignore() default false;

}

 /**
     * 饼图数据获取
     *
     * @param req
     * @return
     */
    @Log("饼图数据获取")
    @PostMapping("/getPieChartData")
    public List<PieChartConfigRes> getPieChartData(@RequestBody ChartConfigReq req) {
        
        return null;
    }

标签:lang,return,Log,controller,org,import,日志,annotation,参出
From: https://www.cnblogs.com/lovedaodao/p/17702367.html

相关文章

  • @Controller与@RestController
    https://blog.csdn.net/qq_31016939/article/details/131363158https://blog.csdn.net/moshowgame/article/details/82869151https://blog.csdn.net/u013154103/article/details/79783884@Controller与@RestController的区别都是用来表示Spring某个类是否可以接收Http请求......
  • [Microsoft Azure] Azure App Service 如何查看实时日志
    本文将介绍如何在AzureAppService中查看实时日志,以便实时监控应用程序的运行状况和性能。在处理AzureAppService上运行的应用程序时,查看实时日志对于监控应用程序性能和诊断问题非常重要。实时日志可以帮助我们快速发现并解决潜在问题。步骤1:登录到Azure门户首先,......
  • jvm-故障排查hs_pidxx-log日志文件
    概述##ThereisinsufficientmemoryfortheJavaRuntimeEnvironmenttocontinue.#Nativememoryallocation(mmap)failedtomap12288bytesforcommittingreservedmemory.#Possiblereasons:#ThesystemisoutofphysicalRAMorswapspace#In32......
  • 对SpringBoot接口进行操作日志记录
    最近业务有需求要对所有的用户操作进行日志记录,方便管理员查询不同权限级别的用户对系统的操作记录,现有的日志只是记录了异常信息、业务出错、重要功能的执行进行了记录,并不能满足需求要求,最直接的解决方法是在每个接口上去添加log.info之类的代码,但是这种方式对业务代码的切入性......
  • flask 简单设置日志文件配置
    最近做了几个模型,需要配置接口提供使用,这时候就用到了日志系统首先创建一个logs.py文件,在文件中配置日志等级、保存路径、日志文件大小、日志输出格式importosimportloggingfromlogging.handlersimportRotatingFileHandler#获取当前绝对路径defget_cwd():r......
  • 日志记录处理程序¶
    Rich提供了一个日志记录处理程序,它将格式化和着色由Python的日志记录模块编写的文本。下面是如何设置丰富记录器的示例:importloggingfromrich.loggingimportRichHandlerFORMAT="%(message)s"logging.basicConfig(level="NOTSET",format=FORMAT,datefmt="[......
  • 基于注解的AOP日志切面控制SpringAOP
    1.配置注解(作用于方法上,相当于要告诉aop对哪些方法做切面植入)importjavax.jdo.annotations.Element;importjava.lang.annotation.*;@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic@interfaceAspectPointCutTag{Stringnam......
  • springboot日志配置
    配置文件使用xml配置日志保存(并不需要pom配置slf4j依赖,starter里面已经配置了依赖了)在项目的resources目录下创建一个【logback-spring.xml】日志配置文件名称只要是一logback开头就行,测试使用log.xml并不会生成日志。合法名称:logback.xml、logback-spring.xml备注:要配置l......
  • 阿里日志规约
    【强制】应用中不可直接使用日志系统(Log4j、Logback)中的API,而应依赖使用日志框架(SLF4J、JCL–JakartaCommonsLogging)中的API,使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。说明:日志框架(SLF4J、JCL–JakartaCommonsLogging)的使用方式(推荐使用SLF4J)使......
  • Controller注解
    @RestController: 之前解释过,@RestController=@Controller+ResponseBody。加上这个注解,springboot就会吧这个类当成controller进行处理,然后把所有返回的参数放到ResponseBody中@RequestMapping: 请求的前缀,也就是所有该Controller下的请求都需要加上/product/product-inf......