首页 > 其他分享 >springboot通过自定义注解@Log实现日志打印

springboot通过自定义注解@Log实现日志打印

时间:2024-01-09 14:34:37浏览次数:35  
标签:lang java springboot 自定义 org import 日志 annotation Log

springboot通过自定义注解@Log实现日志打印

效果图

springboot通过自定义注解@Log实现日志打印_spring

实操步骤

注意,本代码在springboot环境下运行,jdk1.8

1.引入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
    <groupId>org.jodd</groupId>
    <artifactId>jodd</artifactId>
    <version>3.3.7</version>
</dependency>

2.自定义日志注解

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

/**
 * 日志注解
 * @author woniu
 */
@Retention(RetentionPolicy.RUNTIME) //注解在源码、字节码、运行期间都存在
@Target({ElementType.METHOD}) //作用在方法上
public @interface WoniuLog {
}

3.编写日志切面类

import com.alibaba.fastjson.JSONArray;
import org.apache.commons.lang3.StringUtils;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.reflect.MethodSignature;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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.lang.reflect.Method;
import java.util.Optional;

import static jodd.util.MimeTypes.MIME_APPLICATION_JSON;

/**
 * 日志切面类
 * @author woniu
 */
@Aspect //代表这是一个切面类
@Component //注入到spring ioc
public class WoniuLogAspect {


    private static final Logger log = LoggerFactory.getLogger(WoniuLogAspect.class);


    public WoniuLogAspect() {
    }

    /**
     * 前置通知:
     * @annotation(WoniuLog) 表示切面只对加了@WoniuLog的方法生效
     */
    @Before("@annotation(WoniuLog)")
    public void doBefore(JoinPoint joinPoint) {
        ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        if (requestAttributes != null) {
            HttpServletRequest request = requestAttributes.getRequest();
            String contentType = request.getContentType();
            //只有contentType=application/json 的才加日志打印
            if (StringUtils.isNotEmpty(contentType)&&contentType.contains(MIME_APPLICATION_JSON)) {
                Class<?> clazz = joinPoint.getTarget().getClass();
                Method method = ((MethodSignature) joinPoint.getSignature()).getMethod();
                log.info("------------------------------------------AOP日志start--------------------------------------------------------");
                log.info("[AOP日志]:类名:{}", clazz.getName());
                log.info("[AOP日志]:方法名:{}", method.getName());
                Optional.ofNullable(joinPoint.getArgs()).ifPresent(x -> {
                    for (Object arg : x) {
                        String temp = JSONArray.toJSONString(x);
                        log.info("[AOP日志]:方法入参:{}", temp);
                    }
                });
                log.info("------------------------------------------AOP日志end--------------------------------------------------------");
            }
        }


    }
  }

4.UserController

@ApiOperation(value = "查询分页列表")
@PostMapping("/pageList")
@WoniuLog
public Result<PageResult<UserRespVo>> pageList(@RequestBody UserReqVo reqVo) {
    PageResult<UserRespVo> result = userService.findList(reqVo);
    return Result.ok(result);
}

5.运行

springboot通过自定义注解@Log实现日志打印_AOP_02

springboot通过自定义注解@Log实现日志打印_AOP_03

标签:lang,java,springboot,自定义,org,import,日志,annotation,Log
From: https://blog.51cto.com/u_16337916/9161236

相关文章

  • 【Spring技术专题】「实战开发系列」保姆级教你SpringBoot整合Mybatis框架实现多数据
    Mybatis是什么Mybatis是一个基于JDBC实现的,支持普通SQL查询、存储过程和高级映射的优秀持久层框架,去掉了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。Mybatis主要思想是将程序中大量的SQL语句剥离出来,配置在配置文件中,以实现SQL的灵活配置。在所有ORM框......
  • 基于SpringBoot+Vue的航班订票管理系统设计实现(源码+lw+部署文档+讲解等)
    (文章目录)前言:heartpulse:博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌:heartpulse:......
  • Java+springboot开发医院智能导诊小程序源码
    智慧医院如何实现智能导诊服务?1、数据收集和整合:医院需要收集和整合患者的医疗数据,包括病历、化验结果、影像资料等。同时,还可以整合相关的医学数据库和知识库,以便为导诊提供支持。2、患者信息采集:在患者来院时,可以通过智能问诊系统收集患者的基本信息、症状描述、病史等。这可以......
  • 自定义ADFS登录页
    修改adfs登录页公司名称:Set-AdfsGlobalWebContent-CompanyName"ExchangeOWA" 参考:ADFS自定义:https://learn.microsoft.com/zh-cn/windows-server/identity/ad-fs/operations/ad-fs-customization-in-windows-server#custom-themes-and-advanced-custom-themes 修改ADFS登录页......
  • Qt读取文件对比:每次获取自定义的长度和使用系统的API,耗时对比
    0.前言在编程过程中,经常遇到文件读写操作,太频繁了。每次也都写的不一样。突发奇想,想测试下几种不同的读取文件的效率。测试以下三种方式读取文件效率:自定义读取文件耗时使用QFile类API读取文件耗时使用QTextStream类API读取文件耗时在测试前,说一下使用到的知识点。1.Qt......
  • 在现有SpringBoot项目中,快速添加所需依赖项
    如果在SpringBoot项目开发过程中,缺少某些依赖项,如SpringWeb、MybatisFramwork等····,不用手动在pom.xml文件中导入依赖前提:创建的项目为正常的SpringBoot项目,我用的版本是3.2.11.可以直接在pom.xml文件中,找到<dependencies>标签,会发现有个提示2.点击后会出现跟创建项目时添加......
  • elixir mix 自定义任务
    elixir的mix比较灵活,同时也比较强大,很多时候我们可以自己定义一个任务,方便运行以及构建,不少三方框架会提供一些方便的cli,一般也会使用此方法比如ectoorm框架,以下是一个简单的自定义task学习参考开发目录位置这个实际上都f放那里可以,只是有一个简单的约定,建议放到lib/mix/......
  • SpringBoot: 通过MyBatis访问ClickHouse
    一、ClickHouse中建表,添加数据二、SpringBoot项目添加mybatis、clickhouse、druid相关依赖<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.6</version><......
  • 【C++】STL 容器 - STL 容器的值语意 ( 容器存储任意类型元素原理 | STL 容器元素可拷
    文章目录一、STL容器的值(Value)语意1、STL容器存储任意类型元素原理2、STL容器元素可拷贝原理3、STL容器元素类型需要满足的要求4、STL容器迭代器遍历二、代码示例-自定义可存放入STL容器的元素类1、代码示例2、执行结果一、STL容器的值(Value)语意1、STL......
  • springboot集成swagger knife4j 最详细的步骤 手把手教你继承swagger
    springboot集成swaggerknife4j最详细的步骤手把手教你继承swagger效果图Knife4j介绍Knife4j的前身是swagger-bootstrap-ui,前身swagger-bootstrap-ui是一个纯swagger-ui的ui皮肤项目一开始项目初衷是为了写一个增强版本的swagger的前端ui,但是随着项目的发展,面对越来越多的个性......