SLF4J
개발을 진행하며 로그를 기록하고 trace하기 위해 로그 라이브러리를 사용한다. 스프링에서는 기본 로그 라이브러리로 Logback
을 지원하고 이를 SLF4J
인터페이스를 통해 사용할 수 있다.
SLF4J를 사용하기 위해서는 아래와 같은 로거 선언 방식 중 하나를 선택하여 사용하면 된다.
@Slf4j // 클래스 레벨에 해당 어노테이션 선언, 롬복 사용시 가능
public class TempClass { }
private Logger log = LoggerFactory.getLogger(getClass());
private static final Logger log = LoggerFactory.getLogger(Xxx.class);
시스템 콘솔 출력 함수로 로그를 남기면 안되는 이유
Java에서 디버그를 위한 로그를 남기기 위해 아래처럼 시스템 콘솔 출력 명령어를 직접 사용하면 여가지의 문제와 불편한 점이 발생한다.
System.out.println(”INFO logtemp=” + logtemp);
먼저 로그 레벨에 따라 출력할 로그를 지정하지 못한다는 것이다. 나는 INFO 레벨과 그 이하 단계의 로그만 출력하고 싶은데 그렇게 할 수 없다. 또, 무분별한 String 더하기 연산과 저장 연산이 수행된다. 따라서 로그 라이브러리를 사용하는 것이 효율적이다.
log.info("INFO logtemp=" + logtemp);
위의 로그 코드도 문제가 있다. 이렇게 로그 라이브러리를 사용하면 원하는 로그 레벨에 맞추어 로그를 출력할 수 있다. 하지만 문자열 더하기 연산의 문제는 해결되지 않았다는 것이다. 만약 애플리케이션에서 INFO 레벨의 로그를 출력하지 않는다고 하더라도 문자열 더하기 연산과 문자열의 heap 저장 연산을 수행되기 때문에 아래와 같이 로그 함수를 사용하는 것이 효율적이다.
log.info("logtemp={}", logtemp);
Log Level
SLF4J
에서는 총 5개의 로그레벨을 지원한다.
String name = "Spring";
log.trace("trace log={}", name);
log.debug("debug log={}", name); // 디버깅용 메세지
log.info("info log={}", name); // 정보성 메세지
log.warn("warn log={}", name); // 경고성 메세지
log.error("error log={}", name); // 오류 메세지
'Spring' 카테고리의 다른 글
Spring 예외 핸들링 전략 (4) | 2024.03.08 |
---|---|
Spring Interceptor vs Servlet Filter (1) | 2024.03.05 |
[Spring Boot] JPA - MySql 연결 (0) | 2023.03.02 |
[Spring Boot] ThymeLeaf 템플릿 사용 (0) | 2023.03.02 |
[Spring Security] 스프링 시큐리티 시작하기 (0) | 2023.03.02 |