Spring Log

김회민·2023년 2월 11일
0

Spring

목록 보기
1/25

Logging 라이브러리 종류

Log4J

  • 굉장히 오래된 로깅 라이브러리.
  • 2015년 8월 5일 이후 지원이 종료되어 사용하지 않는다.

Logback

  • Log4J 이후 출시된 보다 향상되고 가장 널리 사용되는 라이브러리.
  • 필터링 기능과 자동 리로딩을 지원한다.
  • SLF4J의 구현체로써 동작하며, 스프링 부트에서 기본으로 사용된다.

Log4J2

  • 가장 최신에 나온 라이브러리이며, Apache Log4J의 다음 버전이다.
  • 필터링 기능과 자동 리로딩을 지원한다.
  • SLF4J의 구현체이다.
  • 멀티 쓰레드 환경에서 비동기 로거( Async Logger )의 경우
    다른 Logging 프레임워크보다 처리량이 많고, 대기시간이 짧다.
  • Java Lambda를 지원한다.

SLF4J

  • 로깅 통합 인터페이스
  • 스프링 부트에서 로깅을 구현할 때 사용된다.
    코드의 변경 없이 설정만 변경하는 것으로 다른 로깅 라이브러리로 변경할 수 있게 도와준다.
  • 프로그래머는 SLF4J를 이용해 코드를 작성하고,
    SLF4J는 컴파일 시점에 등록된 구현체 라이브러리( Logback )를 바인딩하여 동작한다.

Logging의 장점

  • Thread 정보, Class 이름 같은 부가 정보를 함께 볼 수 있고, 출력 모양을 정할 수 있다.
  • 로그 레벨에 따라 개발 서버에서는 모든 로그를 출력하고, 운영 서버에서는 출력하지 않는 등,
    로그를 상황에 맞게 조절할 수 있다.
  • 콘솔에만 출력하는 것이 아닌, 파일이나 네트워크 등 별도의 위치에 남길 수 있다.
  • 비동기로 동작한다.

System.out.println()을 사용하지 않는 이유

로깅을 System.out.println() 로 하면 안되는 이유

  • 프로그램과 독립적인 별개의 파일로 저장할 수 없다.
  • 문제가 발생한 날짜, 시각, 문제의 수준, 발생한 위치 등 정보를 기록하기 어렵다.
  • 로그 출력 레벨을 사용할 수 없다.
    • 운영 서버에 올리기 전,
      디버깅용도로 사용된 println을 일일이 지워주거나 별도의 조건문을 통해 처리를 해주어야한다.
  • 동기적으로 호출된다.
    • printlnsynchronized 키워드가 붙어있다. ( 동기화 )
    • 톰캣은 멀티쓰레드로 동작하는데,
      멀티쓰레드 환경에서 하나의 쓰레드가 호출하면 잠기게 된다.

사용법

로그 선언

  • private Logger log = LoggerFactory.getLogger(getClass());
  • private static final Logger log = LoggerFactory.getLogger(Xxx.class);
  • @Slf4j ( Lombok )

로그 호출

  • log.info("hello");
  • log.info("value = {}", value);

주의!
"value = " + value 는 사용하지 않는다.
info.debug 처럼 레벨에 따라 무시되는 함수에 사용할 경우, a + b 계산 로직이 실행되어 불필요한 계산이 발생한다.

로그 단계

  • trace > debug > info > warn > error > fatal
  • 설정된 로그 레벨에 따라 순위에 맞춰 출력되거나 무시된다.
    • 예를 들어 info level로 설정되어 있으면, trace, debug level은 무시된다.
LevelColor비고
FatalRED심각한 문제
ErrorRED사용자 요청을 처리하는 중 발생한 문제
WarnYELLOW처리 가능한 문제지만, 향후 시스템 에러의 원인이 될 수 있는 문제
InfoGREEN로그인이나 상태 변경과 같은 정보성 메시지
DebugGREEN개발시 디버깅 목적으로 출력하는 메시지
TraceGREENDubug보다 좀 더 상세한 메시지

로그 레벨 설정

application.properties

# 전체 로그 레벨 설정 ( 기본 info )
logging.level.root=info

# hello.springmvc 패키지와 그 하위 로그 레벨 설정
logging.level.hello.springmvc=trace

출저

profile
백엔드 개발자 지망생

0개의 댓글