
로그(Log)란?
운영 시스템에서는 System.out.println() 과 같은 시스템 콘솔을 사용해서 필요한 정보를 직접 출력하지 않고, 별도의 로깅 라이브러리를 사용해서 로그를 출력하기 때문에 로깅을 사용하는 법을 알아야 한다.
- 스프링 부트 라이브러리를 사용하면 스프링 부트 로깅 라이브러리(spring-boot-starter-logging)가 함께 포함되며, 다음 라이브러리를 기본으로 사용한다.
- 로그 라이브러리는 Logback, Log4J, Log4J2 등등 수많은 라이브러리가 있고, 이를 통합해서 인터페이스로 제공하는 것이 SLF4J 라이브러리이다.
- SLF4J: 인터페이스
- Logback: 구현체
- 실무에서는 Logback 라이브러리를 대부분 사용한다.
Log 선언 및 호출
1// 로그 선언2private Logger log = LoggerFactory.getLogger(getClass());3private static final Logger log = LoggerFactory.getLogger(MyClass.class);4
5@Slf4j // 롬복 애노테이션으로 간단하게 로그 사용 가능6
7// 로그 호출8log.info("CarefreeLife")Warning!
로그 선언 시 SLF4J의 interface인 Logger(org.slf4j)를 선언해야 한다.

Log를 사용해야 하는 이유?
로그의 포맷에 따른 여러 정보의 제공
- 시간: 로그가 생성된 시간 정보의 제공
- 로그 레벨: println 처럼 모든 이벤트에 출력되는 것이 아닌, 로그의 레벨에 따라 출력여부 설정 가능
- 프로세스 ID: Process의 ID 정보 제공
- 쓰레드 명: 실행된 Thread의 이름 제공
- 클래스 명: process가 실행된 Class의 이름 제공
- 로그 메시지: 로그에 추가적인 메시지 포함하여 출력 가능
콘솔 뿐만 아니라 별도의 위치에 로그 저장 가능
- 파일이나 네트워크 등 로그를 별도의 위치에 남길 수 있다
- 파일로 남길 시, 일별 및 특정 용량에 따라 로그를 분할하여 저장할 수 있다
로그 레벨 설정
로그의 레벨
- TRACE
- DEBUG
- INFO
- WARN
- ERROR
전체 로그 레벨 설정(기본 info)
1logging.level.root=info패키지와 그 하위 로그 레벨 설정
1logging.level.hello.springmvc=trace- trace가 가장 상위 로그 레벨. 모든 로그를 보겠다는 뜻
- 로컬에서 작업시: trace
- 개발 시: debug
- 운영 단계에서는: info 레벨까지만 로그를 출력하여 불필요한 자원 낭비를 막을 수 있다

로그의 올바른 사용법
출력 레벨이 info로 설정되었다고 가정할 때:
1// 잘못된 사용법2log.debug("data=" + data)3// 출력은 되지 않지만, 문자열 덧셈 연산은 이미 실행된다.4// 컴퓨터 자원의 낭비가 발생5
6// 올바른 사용법7log.debug("data={}", data)8// 단순한 파라미터의 전달을 제외하고 어떠한 일도 발생하지 않는다.9// log.debug 를 읽는 순간 logic이 중지됨10// 추가적인 메모리 사용이 발생하지 않는다(참고) 스프링 부트의 jar 를 사용하면 /resources/static/ 위치에 index.html 파일을 찾아 welcome 페이지로 처리해줌.