프로그램을 만들다 보니, 로그를 잘 남기는 것이 중요하다는 것을 알게 되었습니다. 그래서 로깅도 몇 편 정도 쓸 듯 싶습니다. 이번 시간에는 logging.level에 대해서 알아보겠습니다.

 


 문서를 보시면, 로그 레벨은 총 6단계임을 알 수 있어요. TRACE, DEBUG, INFO, WARN, ERROR, FATAL. 제가 낸 문제 중에 lv의 최댓값이 6까지 나올 수 있다는 조건은 이것을 바탕으로 해서 만들어 졌습니다.

 

 프로젝트 구조를 보겠습니다. controller, 그리고 application.properties만 건드렸습니다.

 

 

 testController를 보시면, test를 호출하면 Exception을 throw 하게 만들었습니다. /test는 GET 메서드로만 받고요.

 

 application.properties에는 server.port는 7780으로 설정하였습니다. 그리고 logging.level.root는 ERROR로 설정하였는데요. 이는 루트 로거는 로그 레벨이 ERROR 이상인 경우에만 로그로 떨구겠다는 의미입니다.

 

 

 먼저 /test를 POST METHOD로 호출했습니다. 그랬더니 405 Method Not Allow를 떨굽니다.

 

 

 GET 메서드로 /test를 호출하니, 500 Internal Server Error가 뜨는데요. test를 호출하게 되면 제가 Exception을 던져버렸기 때문입니다. 콘솔에 찍힌 로그를 보겠습니다.

 

 

 ERROR만 찍혔음을 알 수 있어요.

 


 반대로 logging.level.root를 WARN으로 설정하면 어떻게 될까요? 똑같이 POST 메서드로 /test를 호출하고, GET 메서드로 /test를 호출하였습니다. 로그에 찍힌 것을 보면 아래와 같습니다.

 

 아까와는 다르게 ERROR와 WARN 레벨이 찍혔음을 알 수 있어요. 이는 WARN보다 ERROR가 레벨이 더 높기 때문입니다.

 

 다시, 이번에는 logging.level.root의 값을 TRACE로 설정해 보겠습니다.

 

 

 그러면, TRACE와 DEBUG도 같이 출력됩니다. TRACE보다 DEBUG, INFO 등이 로그 레벨이 높기 때문입니다. 정리하자면 root 로거 가 WARN 이상의 레벨을 가지는 로그만 출력하도록 하려면, application.properties 파일에 logging.level.root = WARN 이렇게 써 주시면 됩니다.

 


 로그를 터미널에만 뿌리는 것은 의미가 없습니다. 어딘가에 떨궈서, 나중에라도 볼 수 있게 해야 의미가 있을 겁니다. 저는 파일로 로그 내용을 떨굴 건데요. 파일로 떨구기 위해서 쓸 수 있는 옵션이 있습니다. logging.file.name은 로그를 떨굴 파일명을 지정합니다.

 

 2번째 줄의 의미는 mylog.log로 로그를 떨구라는 의미입니다.

 

 

 mylog.log 파일을 열어 보겠습니다.

 

 

 그러면, INFO 레벨 이상의 로그들이 들어왔음을 알 수 있어요. 다음에 계속 이어서 해 보도록 하겠습니다.