[Spring] Logger - slf4j

SHINYEJI·2023년 10월 23일
0

Back-End

목록 보기
4/24

📌 Logging

🤔 로그를 왜 사용해야 할까?
로깅은 시스템에서 발생한 사건을 기록하는 것으로 로그는 유지보수에 있어 블랙박스와도 같다.
시스템 오류의 문제와 원인을 찾거나 사용자의 행동을 분석할 수 있는 등 로그 데이터의 역할은 생각보다 중요하다.
프로젝트 단위가 작은 경우 로깅 작업을 생략하는 경우도 있지만, 프로젝트 유지보수를 위해 꼭 필요한 작업이니 앞으로는 표준 이출력 대신 로깅을 잘 사용하도록 하자.

Spring은 다양한 로깅 프레임워크와 통합을 허용하므로 로그 메세지를 기록하고 관리할 수 있다.
Spring에서 주로 사용되는 로깅 프레임워크는 Log4j, Logback, slf4j등이 있다.

Log의 레벨

  • 로그 레벨은 로깅 메세지의 중요도 또는 심각도를 나타내는 것이다.
  • 중요도가 낮은 것에서 높은 것으로 나열하면 아래와 같다.
로그 레벨설명
TRACE매우 상세한 디버깅 정보 제공
DEBUG디버그용 메세지, 주로 개발/테스트 단계에서 사용하며 프로덕션 환경에서 비활성화할 수 있다.
INFO정보성 메세지,Spring에서 default설정
WARN경고 메세지, 잠재적 문제나 예외 상황
ERROR심각한 오류 메세지

😮 환경(Env)에 따라 로그 출력을 구분하는 것이 좋다고 한다.

상세한 로그 순서 먼저 나열
Local (로컬) - TRACE
Dev (개발) - DEBUG
Test (테스트) - INFO
Prod (운영) - WARN|ERROR

log레벨 설정

  • 원하는 레벨 이상의 로그 메세지만 기록하도록 구성할 수 있다.
    resources/log4j.xml파일 내에서 logger의 level을 설정할 수 있다.
	<logger name="com.ssafy.car">
		<level value="info" />
	</logger>

slf4j 로깅 프레임워크 사용하기

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
		logger.debug("로그 debug");
		logger.info("로그 info");
		logger.warn("로그 warn");

<level value="info" />로 설정하면 info, warn레벨의 log가 출력되고
<level value="debug" />로 설정하면 debug, info, warn레벨의 log가 출력된다.

Exception 처리 controller

@ControllerAdvice
public class ExceptionController {
	
	private Logger logger = LoggerFactory.getLogger(ExceptionController.class);
	
	// 구체적인 클래스 먼저 실행된다
	@ExceptionHandler(SQLException.class)   // controller를 실행하다가 Exception이 발생하면 무조건 여기로 넘어옴
	public String sqlException(Exception e) {
		logger.debug(" SQL 에러 메세지: {}",e.getMessage());
		return "error/500error";
	}
	
	@ExceptionHandler(Exception.class)   
	public String allException(Exception e) {
		logger.debug("에러 메세지: {}",e.getMessage());
		return "error/500error";
	}
	
}

Controller 에러 발생 시 처리 순서
1. 해당 Controller의 @ExceptionHandler가 처리
2. @ControllerAdvice(전역 예외 처리 컨트롤러)의 @ExceptionHanler가 처리
3. 그냥 500에러 반환

0개의 댓글