Log 로그는 왜 적는 것인가?
로그를 적는 경우 로그 작성 목적과 요구사항에 대한 파악이 우선 필요하다. 소스 코드에 로그를 많이 적게 되면 오히려 운영하면서 많은 로그로 인해 디버깅이 더 불편하게 된다. 키바나를 연동하는 경우에도 쓰레기 데이터가 많이 쌓이기 떄문에 꼭 필요한 로그인지 파악하는 습관이 필요하다.
일반적으로 로그를 작성하는 목적은 아래와 같다.
- 서비스 동작 상태 파악
- 장애 파악 & 알림
- 로그 분석을 통한 서비스 지표의 확인, 트랜잭션, 성능 파악
로그 사용 케이스는?
System.out.println(" ")
- 로그로는 잘 사용하지 않는 케이스
- 개발할 때 콘솔에 데이터를 찍으며 파악할 때 사용했던 명령어
- SasS 환경에서 로컬에 저장되는 로그 파일은 초기화 될 수 있기 떄문에 이러한 방법 제안하기도 함
- 단점으로는 해당 명령어로 로그를 작성하는 경우 파라미터의 메시지만 적히기 때문에 찍히는 시간, 클래스 등 다른 정보를 얻을 수 없음
logging library
- 주로 많이 사용하는 케이스
- slf4j, logback, log4j, nlog 등 로그 전용 라이브러리 활용
- 장점은 로그 전용 라이브러리를 활용하기 떄문에 log.info( ), error( ) 등 로그 찍는 케이스 관련 메서드가 구현되어 있어 편리하며 로그 출력 방식에 대한 확장성이 있음
- 설정만으로 다양한 로그 저장소(파일, sentry, ElasticSerch 등)로 저장할 수 있는 장점이 있음
로그 레벨 별 내용은 무엇을 적을까?
ERROR
- 의도하지 않은 오류 발생(즉시 알림 필요 - 문자, 카카오톡, 이메일 등)
- 종료까지 가지 않지만 의도하지 않은 경우, FATAL 레벨의 경우 어플리케이션을 종료 상태로 만들 수 있는 경우임
- 의도하지 않은 경우 오류는 ERROR에 적는 것을 추천
- 에러 레벨의 로그는 예상 / 의도하지 않은 오류를 핸들링하는 시점에 사용
- 로그 확인 시 에러 레벨은 의도하지 않은 경우만 존재하기 떄문에 빠르게 장애 원인 파악 가능
INFO
- 서비스 동작 상태, 시스템 동작을 알기 위한 목적
- 서비스 시나리오 케이스 : 서비스의 목적 달성을 성공적으로 하는지 분석 및 확인
- 요구사항 : 외부 API호출을 로그로 관리하여 대략적인 통계로 활용
- Exception이 발생하는 경우 무의식적으로 ERROR레벨을 사용하는 경우가 있는데 시나리오 상 의도된 Exception이라면 info 레벌로 작성
DEBUG
- 개발자가 필요해서 작업하는 로그 레벨
- 일반적으로 Dev 존에서만 사용
WARN
- 동작에는 문제 없지만 이상 발생 가능한 경우 작성하는 로그 레벨
- 에러는 아니나 체크 필요한 경우 사용
- 해당 로그 레벨도 알림을 줄지 등 작성 시 관련 협의 필요
로그 분석 & 활용을 돕는 도구
실무에서 예전에는 에러가 발생하는 경우 로그 파일을 서버에서 날짜별로 확인하거나 했었다. 근래에는 키바나로 연동을 해서 로그를 확인하고 있다. 키바나 연동 후에는 로그 확인이 간편해 졌다. 키바나를 통해서 검색을 하거나 로그타입, 날짜 등 지정해서 확인이 가능하며, 그래프로도 확인이 가능해서 문제가 발생하는 경우 데이터 확인이 쉬워졌다. 기존 시스템에서 키바나로 처음 연동 시 세팅이 쉽지 않지만 지금은 사용상의 편리함으로 인해 키바나 연동하는 것을 추천하는 편이다.
- Sentry
- ElasticSearch + Kibana
- Splunk
로그 작성 주의사항
- 로그 파일 / DB 생명 주기 & 저장소 용량
- 개인정보 마스킹 등 체크 필요
- 시스템 주요 정보(시스템 보안, 계정 정보) 작성 주의
반응형
'Develop Basic' 카테고리의 다른 글
홈브류 Homebrew 는 무엇인가? (+기본 명령어) (0) | 2021.06.02 |
---|---|
홈브류 에러 해결! Error: homebrew-core is a shallow clone. (0) | 2021.05.27 |
Error: Unknown command: cask | java, mysql 설치 시 발생 에러 (0) | 2021.05.26 |
vi 문자열 찾기 및 문자열 바꾸기 총정리 (0) | 2021.05.25 |
리눅스 vi 기초 사용법 & 명령어 모음 (0) | 2021.05.20 |
댓글