springboot利用@Aspect实现日志工具类的详细代码

目录
  • 一、导包
  • 二、在启动类上进行注解自动扫描
  • 三、工具类
  • 四、结果

一、导包

 <dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjrt</artifactId>
    <version>1.8.12</version>
  </dependency>
  <dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
    <version>1.9.4</version>
   </dependency>

二、在启动类上进行注解自动扫描

@SpringBootApplication
@EnableCaching
@EnableAsync
@ComponentScan({"com.workorder.*"})
public class WorkOrderApplication {
    public static void main(String[] args) {
        SpringApplication.run(WorkOrderApplication.class, args);

    }
}

三、工具类

@Aspect
@Component
@Slf4j
public class LogAspect {

	@Autowired
	private Environment env;
    @Pointcut("execution(public * com.workorder..controller..*.*(..))")
    public void logPointCut()
    {}
    @Around("logPointCut()")
    public Object around(ProceedingJoinPoint point) throws Throwable {
    	log.info("=========================================");
        long beginTime = System.currentTimeMillis();
        //执行方法
        Object result = point.proceed();
        //执行时长(毫秒)
        long time = System.currentTimeMillis() - beginTime;
        //保存日志
        saveSysLog(point, time);
        return result;
    }
    private void saveSysLog(ProceedingJoinPoint joinPoint, long time) {
        // 接收到请求,记录请求内容
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        String logStr="";
        if (isEnvironment("dev")){
	        String requestUrl = request.getRequestURL().toString() + "?";
	        //获取所有参数方法
	        Enumeration<String> enu=request.getParameterNames();
	        while(enu.hasMoreElements()){
		        String paraName = enu.nextElement();
		        requestUrl+=paraName + "=" + request.getParameter(paraName) + "&";
	        }
	        logStr+="\r\n请求地址:"+ requestUrl.substring(0,requestUrl.length()-1);
        }
	    //请求的参数
	    Object[] args = joinPoint.getArgs();
	    String params = JSONUtil.toJsonStr(args);
        logStr+="\r\n请求方式:"+ request.getMethod();
	    logStr+="\r\n请求方法Token:"+ request.getHeader("token");
	    logStr+="\r\n请求参数:"+  params;
	    logStr+="\r\nIP:"+ request.getRemoteAddr();
        logStr+="\r\n响应时间:"+  time+" ms";
        log.info(logStr);
	/**
	 * 判断当前是什么环境
	 * @param str
	 * @return
	 */
	private boolean isEnvironment(String str) {
		boolean flag = false;
		String[] arr = env.getActiveProfiles();
		List<String> list = Arrays.asList(arr);
		if (list.contains(str)) {
			flag = true;
		}
		return flag;
	}
}

四、结果

到此这篇关于springboot利用@Aspect实现日志工具类的详细代码的文章就介绍到这了,更多相关springboot日志工具类内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • springboot注解Aspect实现方案

    目录 目标 实现 POM 一些实体类 CheckedParam ProcessDbModel 测试用的入参对象 一些工具类 Base64Util SpringBootBeanUtil ProcessBeanUtil CheckedTransmitableUtil PrivateTransmitableUtil 一些Bean PostProcess TestCheckPostProcess Aspect注解 切面类 CheckedAop 线程池配置 持久化service 审批用的service 测

  • Springboot如何使用Aspectj实现AOP面向切面编程

    目录 要在 Springboot中声明 AspectJ 切面 引入jar包 网上也有说要在application.properties中添加 最后补充一点小知识 AspectJ 支持 5 种类型的通知注解 下面是我写的一些通知的实例 大家可以参考一下 要在 Springboot中声明 AspectJ 切面 需在 IOC 容器中将切面声明为 Bean 实例 即加入@Component 注解;当在 Spring IOC 容器中初始化 AspectJ 切面之后, Spring IOC 容器就会为那些与

  • springboot利用@Aspect实现日志工具类的详细代码

    目录 一.导包 二.在启动类上进行注解自动扫描 三.工具类 四.结果 一.导包 <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>1.8.12</version> </dependency> <dependency> <groupId>org.aspectj<

  • SpringBoot整合Kafka工具类的详细代码

    目录 kafka是什么? 应用场景 kafka是什么? Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写.Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据. 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素. 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决. 对于像Hadoop一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案.Kafka的

  • Springboot Mybatis Plus自动生成工具类详解代码

    前言 代码生成器,也叫逆向工程,是根据数据库里的表结构,自动生成对应的实体类.映射文件和接口. 看到很多小伙伴在为数据库生成实体类发愁,现分享给大家,提高开发效率. 一.pom依赖 <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.1</version> &

  • SpringBoot集成Kafka 配置工具类的详细代码

    目录 1.单播模式,只有一个消费者组 2.广播模式,多个消费者组 spring-kafka 是基于 java版的 kafka client与spring的集成,提供了 KafkaTemplate,封装了各种方法,方便操作,它封装了apache的kafka-client,不需要再导入client依赖 <!-- kafka --> <dependency> <groupId>org.springframework.kafka</groupId> <arti

  • springboot利用AOP完成日志统计的详细步骤

    目录 1.创建日志表 2.创建实体类 3.创建枚举类 4.创建自定义注解 5.获取ip的util 6.线程池util 7.HttpServletRequest实现类 8.添加过滤器 9.添加AOP核心类 10.接口测试 步骤写的很详细,可以直接复制拿来用的,其中用到了过滤器.自定义注解以及AOP切面,来完成日志记录统计,感兴趣的收藏起来,以后遇到了可以直接用. 可能步骤会比较多,但是整体跟着思路下来,应该没什么大问题的. 项目用到了过滤器,可能有的人会不理解,之所以用过滤器是因为想要在日志记录p

  • java公众平台通用接口工具类HttpConnectUtil实例代码

    实例如下: package com.common.util; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.ConnectException; import java.net.HttpURLConnection; import java.net.URL; import

  • Java基础之颜色工具类(超详细注释)

    颜色工具类(超详细注释) 设置属性值自动格式化rgb值和十六进制颜色值. import java.util.HashMap; import java.util.Map; public class Color{ private final String[] hex_letters = {"0", "1", "2", "3", "4", "5", "6", "7

  • Java中关于Collections集合工具类的详细介绍

    Collections 是一个操作 Set.List 和 Map 等集合的工具类. Collections 中提供了一系列静态的方法对集合元素进行排序.查询和修改等操作,还提供了对集合对象设置不可变.对集合对象实现同步控制等方法. 排序操作 reverse(List):反转 List 中元素的顺序 shuffle(List):对 List 集合元素进行随机排序 sort(List):根据元素的自然顺序对指定 List 集合元素按升序排序 sort(List,Comparator):根据指定的 C

  • 基于Java实现进制转换工具类的示例代码

    目录 背景 原理 十进制A转换为N进制R N进制R转换为十进制A 应用 延伸 背景 最近有个发送短信的功能,需要在短信中带有详情链接,链接中带有对应信息且要有校验功能,然而短信是按字数收费的,所以链接要尽可能的短.链接中带有数字类型参数,就想到通过低进制转高进制可以减少参数长度. 原理 低进制转换到高进制的时候可能会减少位数,例如二进制是满二进一,十进制是满十进一. 二进制:101001101 转换为对应的四进制为:11031 转换为对应的八进制为:515 转换为对应的十进制为:333 转换为对

  • springboot实现后台上传图片(工具类)

    本文实例为大家分享了springboot实现后台上传图片的具体代码,供大家参考,具体内容如下 1.先配置启动类 继承WebMvcConfigurer 重写方法 @SpringBootApplication //@MapperScan("com.example.demo.Mapper") public class DemoApplication implements WebMvcConfigurer { public static void main(String[] args) { S

随机推荐