好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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

一、导包

?

1

2

3

4

5

6

7

8

9

10

<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>

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

?

1

2

3

4

5

6

7

8

9

10

@SpringBootApplication

@EnableCaching

@EnableAsync

@ComponentScan ({ "com.workorder.*" })

public class WorkOrderApplication {

     public static void main(String[] args) {

         SpringApplication.run(WorkOrderApplication. class , args);

 

     }

}

三、工具类

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

@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日志工具类内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

原文链接:https://blog.csdn.net/qq_36138652/article/details/123615401

查看更多关于springboot利用@Aspect实现日志工具类的详细代码的详细内容...

  阅读:23次