안녕하세요~ 요가하는 개발자입니다 ㅎㅎ
어느날 Log를 어떻게 찍을 것이냐! 라는 이야기를 듣고, 내 나름대로 Log에 대한 데이터를 찾아보며, Log를 어떻게 찍을 것인지에 대해서 정해보았습니다.
몇가지 규칙을 정하고 자료 검색 / 사람들은 어떻게 구현하였는지에 대한 코드 분석을 하여, 아래와 같은 규칙을 정하고 구현을 시작하였습니다.
규칙.
- Controller / Service / Repositroy에 들어가는 ClassName과 Parameter, Time, Api 주소, Api 요청은 항상 Log로 남겨둘 것.
- 유저 표시로는 AOP에서 Body 데이터를 꺼내 유저에 대한 정보를 얻을 수 있는 방법을 어렵고, 현재는 Spring Security는 너무 복잡하고 무겁기 때문에, RequestHeader에서 Token값을 입력하는 방법으로 어느 유저가 리퀘스트를 날렸는지 Header에 있는 Token, key값을 꺼내어 확인할 것.
- 요청이 끝난 마지막에는 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에서 확인이 가능합니다.
저는 이만 아침 요가하러 가보겠습니다~ ㅎㅎ!
'Spring' 카테고리의 다른 글
SpringBoot LogBack 간단설정 (0) | 2021.06.07 |
---|---|
SpringBoot Dynamic Log (0) | 2021.06.07 |
@Transactional 사용 시 주의해야하는 8가지 (0) | 2021.03.21 |
@Transactional을 아시나요? (0) | 2021.03.21 |
@ControllerAdvice와 RequestBodyAdvice을 이용한 RequestBody 데이터 변경 방법 (2) | 2021.03.20 |