로깅
운영에서는 System.out.println 대신 별도의 로깅 라이브러리를 사용한다.
스프링 부트를 사용하면 spring-boot-starter-logging 라이브러리가 포함된다.
스프링 부트 로깅 라이브러리가 기본으로 사용하는 라이브러리
slf4j
logback, log4j 등 다양한 라이브러리를 통합해 인터페이스로 제공하는 라이브러리
logback
실제 로깅 구현체
로그 선언
코드나 롬복으로 사용할 수 있다.
매핑 정보
@Controller
반환값이 String이면 뷰 이름으로 인식된다.
뷰를 찾고 뷰가 렌더링 된다.
@RestController
HTTP 메시지 바디에 바로 입력한다.
@ResponseBody와 관련있다.
로그 포맷
시간
로그 레벨
프로세스 ID
스레드 명
클래스 명
로그 메시지
log로 찍은 데이터는 시간, 스레드, 컨트롤러 등 자세한 정보와 함께 출력된다.
기본 설정에서는 info, warn, error만 출력된다.
로그 레벨
trace > debug > info > warn > error
보통 개발 서버는 debug, 운영 서버는 info로 출력한다.
기본값은 info 레벨로 되어있다.
warn, error가 포함된다.
properties에 trace로 설정을 해주면 trace와 debug도 출력된다.
trace는 빼고 debug만 보고 싶으면 properties에 debug로 설정한다.
올바른 로그 사용법
+로 하면 더하기 연산이 실행된다.
심지어 log.debug이면 debug 레벨이 아니더라도 일단 연산을 하고 본다.
{}로 하면 그런 일이 발생하지 않는다.
log 사용의 장점
스레드 정보, 클래스 이름 같은 부가 정보를 볼 수 있다.
출력 모양을 조정할 수 있다.
환경에 따라 로그 레벨을 조절할 수 있다.
로그 레벨을 코드가 아니라 설정으로 변경할 수 있다.
System.out은 콘솔에만 남지만 log는 파일, 네트워크 등 별도의 위치에 로그를 남길 수 있다.
파일의 경우 날짜, 용량에 따라 로그를 분할할 수도 있다.
성능도 System.out보다 좋다.
내부 버퍼링, 멀티 스레드 등 성능 최적화가 다 되어있어 로그가 한 번에 많이 와도 잘 해결해준다.
실무에서는 꼭 log를 사용해야 한다.
Reference
Last updated