성장일기

내가 보려고 정리하는 공부기록

백엔드/스프링

[Spring] JAVA 로깅 알아보기 (로그레벨, @Slf4j)

와나나나 2024. 4. 3. 23:10
728x90

인프런 김영한 강사님의 스프링MVC 강의를 듣고학습한 내용을 정리한 게시물입니다.

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard

 

김영한 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 강의 - 인프런

웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., 원

www.inflearn.com

 

 

혼자 코딩할 때 문제 발생 지점을 찾기 위해 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.)