首页 > 其他分享 >springboot使用注解方式打印方法日志

springboot使用注解方式打印方法日志

时间:2024-07-03 15:59:30浏览次数:3  
标签:showLog springboot 打印 boolean 注解 日志 true String

springboot使用注解方式打印方法日志,可以很方便的打印日志,通用性很强。耦合很低,很好。

作为程序员的我不废话,咱们直接上代码

先创建个注解


@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ShowLog {
    /**
     * 日志描述
     */
    String value();

    /**
     * 是否开启日志打印,默认true-开启
     */
    boolean enabled() default true;

    /**
     * 是否打印请求参数
     */
    boolean showArgs() default true;

    /**
     * 是否打印返回值
     */
    boolean showResult() default true;

    /**
     * 是否打印耗时
     */
    boolean showTime() default true;
}

利用spring的aop功能,整个环绕通知


@Slf4j
@Aspect
@Component
public class ShowLogHandler {

    @Around("@annotation(showLog)")
    public Object handle(ProceedingJoinPoint joinPoint, ShowLog showLog) throws Throwable {
        if (!showLog.enabled()) {
            return joinPoint.proceed();
        }
        boolean isSuccess = true;
        long startTime = 0;
        String desc = showLog.value();
        String uuid = UUID.randomUUID().toString();
        log.info(">>[{}]打印日志[{}]", uuid, desc);

        try {
            if (showLog.showTime()) {
                startTime = System.currentTimeMillis();
            }
            if (showLog.showArgs()) {
                String args = JsonUtil.getJsonStringOrNull(joinPoint.getArgs());
                log.info(">>[{}][{}]参数[{}]", uuid, desc, args);
            }
            Object result = joinPoint.proceed();
            if (showLog.showResult()) {
                log.info("<<[{}][{}]方法返回值:[{}]", uuid, desc, JsonUtil.getJsonStringOrNull(result));
            }
            return result;
        } catch (Throwable e) {
            isSuccess = false;
            log.error("<<[{}][{}]方法出错:[{}]", uuid, desc, e.getMessage());
            throw e;
        } finally {
            if (showLog.showTime()) {
                long endTime = System.currentTimeMillis();
                log.info("<<[{}][{}]方法耗时[{}]毫秒,[{}]", uuid, desc, endTime - startTime, isSuccess);
            }
        }

    }

}

标签:showLog,springboot,打印,boolean,注解,日志,true,String
From: https://blog.csdn.net/qq398581645/article/details/140011870

相关文章

  • Linux文件与日志
    目录1.Linux文件系统1.1inode号1.2EXT类型文件恢复1.3xfs类型文件备份和恢复2.日志分析2.1日志类型2.2日志配置文件2.3日志分析的重要性在Linux系统中,文件和日志是管理和维护系统运行所不可或缺的。理解它们的工作原理和如何有效地管理和分析是每个系统管理......
  • springboot的MultipartFile转File读取
    在SpringBoot中,处理文件上传时,MultipartFile接口被用来封装上传的文件信息。如果需要将MultipartFile转换为Java标准的File对象进行读取。以下是具体的操作流程:1.创建临时文件        首先,需要将接收到的MultipartFile对象转换为一个临时File对象。      ......
  • 5% 消耗,6 倍性能:揭秘新一代 iLogtail SPL 日志处理引擎与 Logstash 的 PK
    作者:阿柄引言在当今数据驱动的时代,日志收集和处理工具对于保障系统稳定性和优化运维效率至关重要。随着企业数据量的不断增加和系统架构的日益复杂,传统日志处理工具面临着性能、灵活性和易用性等多方面的挑战。Logstash作为一款广受欢迎的开源日志收集与处理工具,早已广泛应用于......
  • springboot-mybatis-db2
    工程pom.xml文件增加如下依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency>&......
  • Linux:文件系统与日志分析
    一、block与inode1.1、概述文件是存储在硬盘上的,硬盘的最小存储单位叫做“扇区”(sector),每个扇区存储512字节。一般连续八个扇区组成一个"块”(block),一个块是4K大小,是文件存取的最小单位。文件数据包括实际数据与元信息(类似文件属性)。文件数据存储在“块"中,存储文件元......
  • springboot+手机商城网站-计算机毕业设计源码201029
    摘 要在信息飞速发展的今天,网络已成为人们重要的信息交流平台。手机店每天都有大量的手机商品需要通过网络发布,为此,本人开发了一个基于springboot手机商城网站。本系统采用跨平台的JAVA语言开发,利用springboot框架进行逻辑控制,MySQL数据库存储数据,最后Tomcat服务器完成发布......
  • Springboot整合Apollo
    一、Apollo作用随着程序功能的日益复杂,程序的配置日益增多:各种功能的开关、参数的配置、服务器的地址……对程序配置的期望值也越来越高:配置修改后实时生效,灰度发布,分环境、分集群管理配置,完善的权限、审核机制……在这样的大环境下,传统的通过配置文件、数据库等方式已经越来越......
  • mysql审计日志-ProxySQL
    MySQL审计概述:出于对数据安全的考虑,很多公司要求对MySQL的操作进行审计,这就要求我们对所有MySQL的操作都进行记录,并且相关信息要齐全(账号,时间,语句等)。 1、general_log:这样虽然可以记录所有的操作日志,但很遗憾,缺少账号等必要信息,而且IO消耗非常大。2、init-connect:这个其实就......
  • SpringBoot的重要考点--自动配置
    SpringBoot的自动配置是其核心特性之一,它允许开发者快速启动和运行Spring应用,而无需编写大量的样板代码。SpringBoot的自动配置主要通过以下几个方式实现:@EnableAutoConfiguration:这个注解是SpringBoot自动配置的入口,它告诉SpringBoot根据类路径中的jar包和配置文件来......
  • Linux统计日志中有多少个不同的IP登录
    题目解析知识点:1、awk-F'''{print$3}'指定空格是分隔符进行分割,取第三个。(不指定默认分隔符也是空格)2、uniq-c(uniq命令可以去除排序过的文件中的重复行,因此uniq经常和sort合用。也就是说,为了使uniq起作用,所有的重复行必须是相邻的。参数-c:进行计数)3、wc-l行......