Spring

SpringBoot Kotlin Log(AOP/Filter)

Flambee 2021. 6. 6. 09:12

안녕하세요~ 요가하는 개발자입니다 ㅎㅎ

 

 어느날 Log를 어떻게 찍을 것이냐! 라는 이야기를 듣고, 내 나름대로 Log에 대한 데이터를 찾아보며, Log를 어떻게 찍을 것인지에 대해서 정해보았습니다.

 

몇가지 규칙을 정하고 자료 검색 / 사람들은 어떻게 구현하였는지에 대한 코드 분석을 하여, 아래와 같은 규칙을 정하고 구현을 시작하였습니다.

 

규칙.

  1. Controller / Service / Repositroy에 들어가는 ClassName과 Parameter, Time, Api 주소, Api 요청은 항상 Log로 남겨둘 것.
  2. 유저 표시로는 AOP에서 Body 데이터를 꺼내 유저에 대한 정보를 얻을 수 있는 방법을 어렵고, 현재는 Spring Security는 너무 복잡하고 무겁기 때문에, RequestHeader에서 Token값을 입력하는 방법으로 어느 유저가 리퀘스트를 날렸는지 Header에 있는 Token, key값을 꺼내어 확인할 것.
  3. 요청이 끝난 마지막에는  Reqeust에 대한 요청 값과, 결과 값을 한눈에 볼 수 있도록 Filter를 통한 Log로 보여줄 것.

 

해당 규칙을 찾아 구현을 시도한 결과 

 

AOP를 통하여, controller / method/ methodParameter / header / log_time / request_url / http_method를 찍을 수 있었고,

 

2021-06-06 08:57:11.134  INFO 9546 --- [nio-8080-exec-1] a.l.h.config.log.LoggingAspect           : 

params : {controller=ArticleService, method=getArticleList, methodParameter=[], header=asdnfklndaskfnlknsdf, log_time=Sun Jun 06 08:57:11 JST 2021, request_uri=/article, http_method=POST}

2021-06-06 08:57:11.137  INFO 9546 --- [nio-8080-exec-1] a.l.h.config.log.LoggingAspect           : 

params : {controller=ArticleController, method=callArticleInfo, methodParameter=[{"method":"POST","name":"asd"}], header=asdnfklndaskfnlknsdf, log_time=Sun Jun 06 08:57:11 JST 2021, request_uri=/article, http_method=POST}

 

Filter를 통하여 Request에 대한 요청 값과, 결과 값을 한 눈에 볼 수 있도록 Log를 보여줄 수 있었습니다.

 

2021-06-06 08:57:11.253  INFO 9546 --- [nio-8080-exec-1] a.l.h.config.log.LoggerFilter            :

[REQUEST] POST - /article 200 - 0.0
Headers : {content-type=application/json, key=asdnfklndaskfnlknsdf, user-agent=PostmanRuntime/7.26.8, accept=*/*, postman-token=82a80041-5216-49d5-8156-668f298f313c, host=127.0.0.1:8080, accept-encoding=gzip, deflate, br, connection=keep-alive, content-length=41}
Request : {
"method": "POST",
    "name" : "asd"
}
Response : [{"id":1,"subject":"제목이다!1","content":"내용이다!1","createDate":"2021-06-06T08:51:01.413995"},{"id":2,"subject":"제목이다!2","content":"내용이다!2","createDate":"2021-06-06T08:51:01.414026"},{"id":3,"subject":"제목이다!3","content":"내용이다!3","createDate":"2021-06-06T08:51:01.414034"},{"id":4,"subject":"제목이다!4","content":"내용이다!4","createDate":"2021-06-06T08:51:01.41404"},{"id":5,"subject":"제목이다!5","content":"내용이다!5","createDate":"2021-06-06T08:51:01.414046"}]

 

해당 소스는 https://github.com/Flamme1004K/Spring-API-AOP-Logging 에서 Log Package에서 확인이 가능합니다.

 

저는 이만 아침 요가하러 가보겠습니다~ ㅎㅎ!