로깅이란?
운영체제나 소프트웨어가 실행 중에 발생하는 이벤트를 기록하는 행위
로깅하는 법
- System API call
리눅스 시스템 API 의 syslog()
- 로깅 라이브러리
JCL, slf4j, log4j, logback 등등
slf4j
- Simple logging facade for Java
- 이름에서 볼 수 있듯 퍼사드 패턴을 활용해 다양한 로그라이브러리 들을 통일된 하나의 방법으로 사용할 수 있도록 함
- 스프링 부트에서는 logback 을 binding 해서 사용
로깅레벨
- FATAL : 매우 심각한 에러가 발생한 경우. 프로그램이 종료되는 경우가 많다.
- ERROR : 에러가 발생했지만, 프로그램이 종료되지 않는 경우
- 외부 API 호출 했는데 응답이 Error 로 오는 경우
- WARN : 에러가 될 수 있는 잠재적 가능성이 있는 경우, 알람이 오도록 설정하여 에러가 나기 전 조취를 취하거나, 에러가 나면 그 전의 상황을 알 수 있다.
- 인메모리 캐시 용량이 다 차가는 경우, DB커넥션이 설정한 접속시간보다 오래걸리는 경우 등
- INFO : 애플리케이션의 상태를 간결하게 보여주는 경우
- DEBUG : INFO 레벨보다 더 자세한 정보가 필요한 경우, 권한이 없어 디버깅이 불가능한 경우 유용
- TRACE : DEBUG 레벨보다 더 자세한 정보가 필요한 경우, 개발환경에서 버그를 해결하기 위해 사용. 최종 프로덕션이나 커밋에 포함하면 안된다.
독자를 고려한 로그메시지
1독자 - Machine
- 로그 파일의 인코딩 문제를 최소화하기 위해 되도록 영어로 사용하자
- 파싱하기 좋도록 작성하자
2독자 - 개발자
- 로그 메시지에 컨택스를 담을 것
- 가능하면 해결방법을 같이 적을 것