728x90
인프런 김영한 강사님의 스프링MVC 강의를 듣고학습한 내용을 정리한 게시물입니다.
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard
혼자 코딩할 때 문제 발생 지점을 찾기 위해 System.out을 많이 사용했다. 그런데 강사님이 System.out 보다는 로깅의 사용을 지향하는 것이 좋다고 하셨다! 그렇다면 로깅이란 무엇일까 ?
1. 로깅 (logging) 이란 ?
로그는 시스템의 상태나 동작 정보를 시간 경과에 따라 기록하는 것을 의미한다. 이런 로그를 기록하는 것을 로깅이라고 한다. 자바에서는 다양한 로깅 라이브러리를 지원한다고 한다. Logback, Log4J 등등 많지만, 이를 통합해 인터페이스로 제공한 것이 바로 SLF4J이다.
- SLF4J (인터페이스)
- Logback (구현체)
그래서 스프링부트에서는 Logback을 주로 사용한다고 한다.
2. 로그 선언과 호출
로그는 다음과 같이 선언한다.
private Logger log = LoggerFactory.getLogger(getClass());
private static final Logger log = LoggerFactory.getLogger(aa.class);
LoggerFactory의 getLogger 메소드를 통해 로그를 선언할 수 있다.
호출은 다음과 같다.
log.trace("hello world");
log.debug("hello world");
log.info("hello world");
log.warn("hello world");
log.error("hello world");
뭐가 이렇게 많은걸까 ? 아래에서 자세히 알아보려고 한다.
3. 로그레벨
로그레벨은 로그 메시지의 중요도를 나타내는 수준을 의미한다. 상황에 따라 다른 수준의 중요도를 갖기 때문에 이를 표현하기에 적합하다.
로그레벨 | 설명 |
Trace | 가장 상세한 로그레벨 애플리케이션의 실행흐름, 디버깅 정보를 자세히 기록함 |
Debug | 디버깅 목적으로 사용 실무에선 주로 개발단계에서 상세한 정보 기록에 사용함 |
Info | 정보성 메시지 기록 실무에선 주로 운영단계에서 실행상태에 대한 정보를 전달하기 위해 사용함 |
Warn | 경고성 메시지 기록 애플리케이션이 정상적으로 동작하지만 주의가 필요한 상황을 알려줌 |
Error | 오류메시지 기록 |
Fatal | 정말 심각한 오류 메시지 기록 |
로그레벨 설정은 아래와 같이 할 수 있다.
// properties 파일에 작성
// 전체 로그 레벨 설정
logging.level.root=info // info레벨로 설정한 거
// 특정 패키지와 그 하위 로그 레벨 설정. hello.log패키지를 debug레벨로 설정한다고 가정
logging.level.hello.log=debug
4. 로깅의 장점
로그 사용시 장점은 아래와 같다.
- 쓰레드 정보, 클래스 이름같은 부가 정보를 함께 볼 수 있음
- 개발 서버와 운영 서버에서의 로그를 다르게 하는 등 상황에 맞게 조정할 수 있음
- 콘솔출력 외에도 파일이나 네트워크 등 별도의 위치에 남길 수 있음
- System.out보다 성능 좋음 (내부버퍼링, 멀티 쓰레드 etc.)
'백엔드 > 스프링' 카테고리의 다른 글
[Spring] 5. 빈 생명주기 콜백- 스프링 핵심원리 기본편 (1) | 2024.02.09 |
---|---|
[Spring] 4. 자동으로 의존관계 주입하기 - 스프링 핵심원리 기본편 (2) | 2024.02.07 |
[Spring] 3. 싱글톤 컨테이너 - 스프링 핵심원리 기본편 (1) | 2024.02.05 |
[Spring] 2. 스프링으로 전환하기 (스프링 빈, 스프링 컨테이너) - 스프링 핵심원리 기본편 (1) | 2024.02.05 |
[Spring] 1. 순수 자바로 설계하기 - 스프링 핵심원리 기본편 (1) | 2024.01.29 |