dev

로깅 - 무엇을, 어떻게 남겨야 할까

현인 2023. 1. 3. 15:18

안녕하세요 최근 프로젝트를 진행하면서 예외가 발생하거나 따로 정보를 추가해야할 경우에 로깅을 주로 사용했는데요, 이때 정확히 어떤 레벨로 어떤 메시지를 남겨야 하는 지 자세히 알아보고자 해당 글을 작성하게 되었습니다.

 

선원들이 사용했다고?

로깅이란 단어는 배를 타는 선원들끼리 먼저 사용하고 있었는데요, 선박의 속도를 측정하기 위해 바다에 chip log 라는 장치를 띄움으로써 속도를 측정할 수 있었다고 합니다. 또한 선장들이 작성하는 항해일지를 logbook 이라고 했다고 합니다.

'로깅'은 이때부터 '무언가를 기록하는 행위'로써 사용되어 지금에 이르러서까지 사용되고 있습니다.

왜 기록해야 할까?

 

사실 이 질문에 대한 답은 서비스를 배포하여 운영해보신 분들이거나, 관련된 공부를 해보셨으면 바로 나올 수 있을 거라고 생각이 드는데요.

 

로깅을 해야하는 이유는 다음과 같겠죠.

  • 서비스에 문제가 발생했을 경우 빠르게 원인파악을 하기 위함
  • 로그 분석을 통한 서비스 성능 확인
  • 서비스의 동작 상태 파악

 

이러한 연유에서 로깅은 매우 필수적인 작업이라고도 할 수 있겠습니다.
하지만 로깅이 너무 많을 경우 원인파악을 위한 디버깅 시에 오히려 불필요한 정보들 때문에 필요한 정보를 확인할 수 없는 경우가 생길 수 있어 무엇을 남기는 지가 굉장히 중요하다고 할 수 있겠습니다.

 

무엇을,

위에서 언급했듯 로그는 TMI가 있어선 안됩니다.

정말 필요한 정보들만이 로그에 남아서 디버깅 시에 유용하게 쓸 수 있어야 합니다.

 

딱 이렇다 할 내용을 넣어라. 라고 정할 순 없지만 팀이나 회사, 서비스별로 상황에 맞추어 필요한 로깅을 고민하고 또 고민하여 작성할 수 있도록 해야합니다.

 

어떻게 남겨야할까?

로깅은 아래 두 가지 방법으로 할 수 있는데요,

  • System.out.println()
  • logback(로깅 라이브러리)

println() 같은 경우 I/O 작업으로 Console에 로깅을 하고 해당 작업이 끝나기 전까지 다른 작업이 중단되어 성능상에 문제가 생길 수 있어, println()보단 로깅 라이브러리를 추천합니다.

 

로깅 레벨에 맞추어

로깅 내용도 중요하지만 나중에 다시 볼때 어떤 의도로 로그를 남겼는 지를 알 수 있는 로깅 레벨도 조금 중요한 편입니다.

 

로그 레벨은

 

TRACE -> DEBUG -> INFO -> WARN -> ERROR -> FATAL

 

순으로 나뉘어져 있으며 보통 의도가 확실하게 나뉘어 주로 사용하는 것은, INFO와 ERROR 정도입니다.

 

INFO는 서비스의 예외 상황이나, 서비스 시나리오가 성공적으로 실행됐는 지 확인하는 로그를 남길 때 주로 사용합니다.

ERROR는 발생했을 때 당장 해결해야하는 치명적인 에러들을 확인할 수 있도록 남기는 로그 레벨입니다.

'dev' 카테고리의 다른 글

[Intellij] 코드 템플릿, 코드 자동완성 기능  (0) 2023.03.07