로깅 logging
'로깅(logging)'이란?
: 애플리케이션이 동작하는 동안 시스템의 상태나 동작 정보를 시간순으로 기록
로깅은 개발 영역 중 '비기능 요구사항'에 속한다. 즉, 사용자나 고객에게 필요한 기능은 아니라는 것이다. 하지만 로깅은 디버깅하거나 개발 이후 발생한 문제를 해결할 때 원인을 분석하는에는 꼭 필요하다.
자바에서 많이 사용되는 로깅 프레임워크는 'Logback'이다.
Logback은 log4j 이후에 출시된 로깅 프레임워크로 slf4j를 기반으로 구현되었고, 과거에 사용되던 log4j에 비해 월등한 성능을 보인다. 스프링 부트의 spring-boot-starter-web 라이브러리 내부에 내장되어 있어 별도로 의존성을 추가하지 않아도 사용할 수도 있다.
Logback의 특징
크게 5개의 로그 레벨(TRACE, DEBUG, INFO, WARN, ERROR)을 설정할 수 있다.
1) ERROR : 로직 수행 중 시스템에 심각한 문제가 발생해 작동이 불가능한 경우
2) WARN : 시스템 에러의 원인이 될 수 있는 경고 레벨
3) INFO : 애플리케이션의 상태 변경과 같은 정보 전달을 위해 사용
4) DEBUG : 애플리케이션의 디버깅을 위한 메시지를 표시하는 레벨
5) TRACE : DEBUG 레벨보다 더 상세한 메시지를 표현하기 위한 레벨
실제 운영 환경과 개발 환경에서 각각 다른 출력 레벨을 설정해 로그를 확인할 수 있다.
Logback의 설정 파일을 일정 시간마다 스캔해서 애플리케이션을 재가동하지 않아도 설정을 변경할 수 있다.
별도의 프로그램 지원 없이도 자체적으로 로그 파일을 압축할 수 있다.
저장된 로그 파일에 대한 보관 기간 등을 설정해 관리할 수 있다.
Logback 설정 관련
일반적으로 클래스패스(classpath)에 있는 설정 파일을 자동 참조하여 Logback 설정 파일은 리소스 폴더 안에 생성한다.
자바 또는 스프링 프로젝트는 일반적으로 logback.xml 이라는 이름으로 참조하지만 스프링 부트에서는 logback-spring.xml 파일을 참조한다.
설정 파일은 XML 형식을 띠고 있다.
설정 파일은 각 영역 별로 Property, Appender, Encoder, Pattern, Root 영역으로 나뉜다.
Appender 영역
Appender 영역은 로그의 형태를 설정하고 어떤 방법으로 출력할지를 설정하는 곳이다.
Appender 자체는 하나의 인터페이스를 의미하며, 하위에 여러 구현체가 존재한다.
Logback의 설정 파일을 이용하면 각 구현체를 등록해서 로그를 원하는 형식으로 출력할 수 있다.
encoder 요소를 통해 로그의 표현 형식을 패턴으로 정의도 한다.
Root 영역
설정 파일에 정의된 Appender를 활용하려면 Root 영역에서 Appender를 참조해 로깅 레벨을 설정해야 한다. 만약 특정 패키지에 대해 다른 로깅 레벨을 설정하고 싶다면 root 대신 logger를 사용해 지정할 수도 있다.