
log100 = 2
개발을 하기 전까지 나에게 로그는 log_10이었다가, 대학에서는 log_e었다가 지금은 log.info()가 되었다.
로그란 기록을 남기는 것으로, 현업에서 정말 중요하다고 한다. 나는 언제쯤. 사실 웹 프로젝트 하나 배포만 해봐도 로그가 얼마나 중요한지는 알 수 있을것이다. 생각보다 로그를 안 찍어두는 사람들도 많고, 다들 로그좀 찍었으면 싶을 때도 있지만... 너무 찍어두면 그것도 힘들다. 성능 문제도 있지만 배포 담당한 사람이 문제를 찾기가 너무 힘들다.
Log는 매우 중요한 일이지만 개발자가 하나하나 이를 구현하는 것은 너무 힘들다. 그냥 콘솔에 찍어두는 게 아니라, logging level에 따라 표시/저장 해야하고, 쌓인 로그를 스크롤하며 올려 볼 것은 아닐테니, 파일로 저장도 해야하는데, 이런 복잡하고 반복되고 공통적인 작업을 존경스러운 선배(?) 개발자님들께서 만들어두지 않았을리가 없다.
logback, log4j 등 다양한 로그를 위한 라이브러리가 존재한다. 각각에 대해서는 추후 포스팅 하도록 하겠다. 밀린게 많다
Spring에서 @Slf4j annotation을 통해서 쉽게 logger를 사용할 수 있다. Slf4j는 Simple Logging Facade For JAVA의 약자로, 다양한 로그를 위한 라이브러리에 대한 interface 역할을 하는 라이브러리다. Spring에서 Lombok에서 제공하는 @Slf4j를 통해서 쉽게 log를 찍을 수 있다.
@RestController
@Slf4j
public static MemberController {
...
public void exampleMethod() {
log.info("로그좀 잘 찍어주세요...");
}
}
위 코드와 같이 작성하면 log를 사용할 수 있는데, 사실은 아래와 같은 작업을 lombok을 통해 logging을 설정을 간편히 사용할 수 있도록 한 것이다.
@RestController
public static MemberController {
private final Logger log = LoggerFactory.getLogger(this.getClass());
...
public void exampleMethod() {
log.info("로그좀 잘 찍어주세요...");
}
}
log라는 이름이 싫다면 lombok의 config를 바꾸거나, 위 코드처럼 직접 logger를 원하는 이름으로 받아오면 된다.
앞에서 말했듯이 너무 많은 로그는 오히려 프로그램의 동작을 관찰하거나 오류를 추적하기 힘들게 할 수 있다. 하지만 개발 과정에서 동작을 확인하기 위해 로그를 많이 찍어두고, 커밋 전에 로그를 지우면 문제가 생기지 않을까. 귀찮다 귀찮음을 떠나, 물론 충분히 고민을 하고 테스트도 하고 커밋을 했겠지만 (했을까) 생각하지 못했던 문제는 언제나 발생한다. 그럼 얼마전 지웠던 로그들을 하나 하나 다시 작성하며 문제를 찾아야 한다. 한 번 해보면 이게 맞나 싶을거다. 그럼 어떻게 해야 하냐? 주석처리 해도 되긴 하겠지만, 로그 레벨을 다르게 하면 된다.(될걸요...?)
로그 레벨은 보통 Error, Warn, Info, Debug, Trace 다섯 단계로 구성되어있으며, 왼쪽 부터 높은 심각도 수준이다.
에러다.
사실 개인적으로는 잘 쓰지 않는 로그이다. 가능하면 발생 가능한 에러(예외)에 대한 처리는 직접 하고자 하기에 직접 Error 레벨의 로그를 쓸 일은 없지 않은가 싶다.
경고다.
에러 까지는 아니지만, 에러가 발생할 수 있는 상황에 작성하면 될것 같다. 정상적으로 response는 보내지만 의도하지 않은 상황에 사용하면 되지 않을까 싶다.
정보다.
많이 쓰지않나 싶다. Spring 기본 logging level도 info라, 별다른 설정 하지 않고 실행하면 info 이상 레벨의 위 로그들을 만나볼 수 있다.
이름부터 개발 환경에서 사용해야 할것 같다. 개인적으로 개발에 사용될 로그를 debug 레벨로 두고, 필요한 정보(뭐가 있을까)는 info 레벨로 작성한 후 개인 환경에서 logging level을 debug로 하려고 한다... 노력한다
괜찮은 방법인가 싶지만, debug의 문제가... Spring을 실행해보면 알겠지만, 내가 작성한 log 외에도 자동으로 찍히는 로그가 상당히 많다. 그런데 로그 레벨을 debug로 하면.. 생각보다 뭐가 많이 찍힌다. 그치만 Spring을 공부하는 입장이니 debug로 두고 여러 로그들을 읽어보는 것도 도움이 되지 않을까 싶어 그렇게 하고있다.

추적?
무튼 가장 아래 단계의 로그인데, logging level을 한번 trace로 두고 실행해보면 거의 실시간으로 엄청나게 많은 로그가 찍힌다.
Spring의 설정 파일인 applicaion.properties 또는 application.yml 파일에서 변경하면 된다. properties 기준으로
logging.level.root=trace
위와 같이 logging level을 추가해주면 된다.
