로그를 남겨두기 위해 사용되는 프레임워크입니다. 로그를 남겨두면 애플리케이션이 실행되는 동안 발생하는 문제점을 추적하는데 용이합니다.
스프링 부트는 기본적으로 Log4j
의 구현체인 Logback
과 Log4j2
를 제공합니다. 이중 하나를 선택하기 위해서 둘을 비교한 결과 Log4j2
가 훨씬 성능적으로 좋으나, Logback
이 설정 면에서 쉽고 편리할 뿐만 아니라, 러닝커브와 참고할 수 있는 자료들을 고려하여 Logback
을 선택하였습니다.
각 로그 레벨의 의미는 아래와 같습니다.
trace | · 로깅의 가장 세밀한 수준으로, 애플리케이션의 세부적인 동작을 기록하는 데 사용됩니다. |
---|---|
debug | · 개발 혹은 테스트 단계에서 기능들이 올바르게 작동하는지 확인하기 위한 로그입니다. |
· 운영환경에서 남기지 않습니다. | |
info | · 애플리케이션에서 정상 작동 정보를 나타내기 위한 로그입니다. |
· info 로그를 통해 애플리케이션 상태, 설정 또는 외부 리소스와의 상호 작용과 같은 상태를 확인합니다. | |
· 시스템에서 유의미한 값만을 필터링하는 것이 핵심입니다. | |
warn | · 애플리케이션에 잠재적으로 문제가 발생할 수 있는 경우 남기는 로그입니다. |
· 이 레벨의 메세지는 개발자가 조치를 취할 수 있도록 주의를 기울일 필요가 있는 상황을 나타냅니다. | |
error | · 애플리케이션에서 발생한 심각한 오류나 예외 상황을 나타내는 로그 레벨입니다. |
· error 로그가 남았을 때는 심각한 상황이므로 알림 경보를 뜨게 해야 합니다. |
위의 레벨을 고려하여 아래와 같이 로그를 보여주었습니다.
아래와 같이 warn
과 error
로그가 발생하는 상황을 구분 지었습니다.
| warn | (1) 클라이언트 쪽에서 유효하지 않은 값을 반환할 때 (2) 사용자의 잘못된 요청으로 로직이 정상 작동하지 않을 때 (ex. 유효하지 않은 id를 통해 객체를 조회하려 할 때) | | --- | --- | | error | (1) 외부에서 잘못된 요청이 아닌, 코드상의 문제로 자바 내부의 예외(ex. NPE, IllegalArgumentException 등)이 발생할 때 |
우리가 원하는 로그를 남기기 위해서는 spring에서 기본으로 제공하는 설정을 수정해야 합니다. 이를 위해서 logback-spring.xml파일을 만들고 설정을 커스텀했습니다.
팀 모모에서 남기는 로그 형식은 아래와 같습니다.
%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] [%file:%L] %msg%n
포함 정보 | 정보 설명 |
---|---|
%d{yyyy-MM-dd HH:mm:ss} |
로그 이벤트의 타임스탬프를 설정합니다. |
로그가 발생한 시간을 알 수 있습니다. | |
%-5level |
로그 레벨을 출력합니다. |
로그 레벨을 보여, 로그 별로 적절하게 대응할 수 있습니다. | |
%thread |
로그가 발생한 스레드의 이름을 출력합니다. |
각 스레드가 어떻게 작업했는지 확인할 수 있습니다. | |
%file:%L |
로그가 발생한 파일과 파일의 번호를 출력합니다. |
코드에 문제가 발생했을 때, 문제 발생 지점의 위치를 빠르게 확인할 수 있습니다. | |
%msg |
로그 메시지를 출력합니다. |
로그에 대한 정보를 알 수 있습니다. |