激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

香港云服务器
服務器之家 - 編程語言 - Java教程 - 使用spring boot通過自定義注解打印所需日志

使用spring boot通過自定義注解打印所需日志

2021-10-22 10:59kin_wen Java教程

這篇文章主要介紹了使用spring boot通過自定義注解打印所需日志的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

spring boot自定義注解打印日志

在實際項目中可能需要監控每個接口的請求時間以及請求參數等相關信息,那么此時我們想到的就是兩種實現方式,一種是通過攔截器實現,另一種則通過AOP自定義注解實現。

本文介紹自定義注解實現方式

自定義注解,四個元注解這次就不解釋了。

?
1
2
3
4
5
6
7
8
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface WebLog {
    /**
     * 日志信息描述
     */
    String description() default "";
}

AOP實現:

1.@Order注解用來定義切面的執行順序,數值越小優先級越高。

2.@Around環繞通知,我們可以自定義在什么時候執行@Before以及@After。

3.ThreadLocal針對每個線程都單獨的記錄。

?
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
@Aspect
@Component
public class WebLogAspect {
    private static ThreadLocal<ProceedingJoinPoint> td = new ThreadLocal<>();
    @Pointcut("@annotation(com.example.demo.annotation.WebLog)")
    @Order(1)
    public void webLog(){}
    @Before("webLog()")
    public void doBefor(JoinPoint point){
        System.out.println("***********method before執行************");
        ServletRequestAttributes attributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        System.out.println("請求URL:"+request.getRequestURL());
        System.out.println("請求參數:"+ Arrays.toString(point.getArgs()));
        System.out.println("***********method before結束************");
    }
    @Around("webLog()")
    public Object doAround(ProceedingJoinPoint point) throws Throwable {
        System.out.println("***********執行環繞方法開始************");
        td.set(point);
        long startTime = System.currentTimeMillis();
        ProceedingJoinPoint joinPoint = td.get();
        Object proceed = joinPoint.proceed();
        System.out.println("執行耗時毫秒:"+ (System.currentTimeMillis()-startTime));
        System.out.println("***********執行環繞方法結束************");
        return proceed;
    }
}

Controller

?
1
2
3
4
5
6
7
8
@RestController
public class LoginController {
    @PostMapping("/user/login")
    @WebLog(description = "用戶登錄接口")
    public UserForm login(@RequestBody UserForm user){
        return user;
    }
}

測試結果

使用spring boot通過自定義注解打印所需日志

通過自定義注解獲取日志

1.定義一個注解

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
package com.hisense.demo02;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
 
/**
 * @author : sunkepeng  E-mail : sunkepengouc@163.com
 * @date : 2020/8/8 20:09
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Check {
}

2.寫一個測試用類,并使用注解

?
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
package com.hisense.demo02;
 
/**
 * @author : sunkepeng  E-mail : sunkepengouc@163.com
 * @date : 2020/8/8 20:04
 */
public class Calculator {
    @Check
    public void add(){
        System.out.println("1+0=" + (1+0));
    }
    @Check
    public void sub(){
        System.out.println("1-0=" + (1-0));
    }
    @Check
    public void mul(){
        System.out.println("1*0=" + (1*0));
    }
    @Check
    public void div(){
        System.out.println("1/0=" + (1/0));
    }
    public void show(){
        System.out.println("永無bug");
    }
}

3.使用注解,在測試類中輸出log

?
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
package com.hisense.demo02;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.Method;
 
/**
 * @author : sunkepeng  E-mail : sunkepengouc@163.com
 * @date : 2020/8/8 21:39
 */
public class TestCheck {
    public static void main(String[] args) throws IOException {
        Calculator calculator = new Calculator();
        Class calculatorClass = calculator.getClass();
        Method[] methods = calculatorClass.getMethods();
        int number =0;
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("bug.txt"));
        for (Method method : methods) {
            if (method.isAnnotationPresent(Check.class)){
                try {
                    method.invoke(calculator);
                } catch (Exception e) {
                    number++;
                    bufferedWriter.write(method.getName()+"出現異常");
                    bufferedWriter.newLine();
                    bufferedWriter.write("異常的名稱:"+e.getCause().getClass().getSimpleName());
                    bufferedWriter.newLine();
                    bufferedWriter.write("異常的原因"+e.getCause().getMessage());
                    bufferedWriter.newLine();
                    bufferedWriter.write("-----------------");
                    bufferedWriter.newLine();
                }
            }
        }
        bufferedWriter.write("本次共出現:"+number+"次異常");
        bufferedWriter.flush();
        bufferedWriter.close();
    }
}

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/kin_wen/article/details/93412270

延伸 · 閱讀

精彩推薦
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7472021-02-04
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
928
主站蜘蛛池模板: 精品一区二区三区四区在线 | 免费午夜网站 | 美女网站黄在线观看 | 久久久www视频 | 看免费毛片| 亚洲精品aaaaa | 免费一区区三区四区 | 欧美高清一级片 | 夜夜夜操操操 | 成品片a免费直接观看 | 天天色综合6 | 黄色网址在线播放 | 国产精品久久久久av | 免费在线观看一级片 | 欧美精品成人 | 最近日本电影hd免费观看 | 国产一区二区三区视频免费 | 色七七网站 | 99最新网址 | asiass极品裸体女pics | 亚洲片在线观看 | 国产一级毛片视频在线! | 免费毛片儿 | 精品久久久久久久 | 亚洲影院在线播放 | 日日天日日夜日日摸 | 国产欧美在线观看不卡一 | 欧美伦理一区二区 | 国产一级毛片网站 | 亚洲综合视频网站 | 麻豆一二区 | 最新亚洲视频 | 性生活视频软件 | 综合毛片 | 91成人在线免费视频 | chinesexxxx刘婷hd 国产91在线播放九色 | 亚洲天堂岛国片 | 在线a亚洲视频播放在线观看 | 精品一区二区三区日本 | 精品国产乱码久久久久久预案 | 成人在线观看免费爱爱 |