[Spring Basic] 로그
스프링은 SLF4J (Simple Logging Facade for Java) 를 인터페이스로 여러 가지 로그 라이브러리들을 제공한다.
스프링이 기본적으로 제공하는 Logback 로그 프레임워크에 대해 살펴보자.
@RestController
public class LogTestController {
private final Logger log = LoggerFactory.getLogger(getClass());
@RequestMapping("/log-test")
public String logTest() {
String name = "Spring";
System.out.println("name = " + name);
// 우선 순위 오름차순.
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);
return "check";
}
}
로그 레벨은 TRACE > DEBUG > INFO > WARN > ERROR 순서이다. (ERROR가 우선순위가 가장 높음)
logging.level.hello.springmvc = trace
애플리케이션 프로퍼티를 통해 로그에 관련된 설정을 조작할 수 있다. (info가 기본값)
개발 서버에서는 로그를 debug로 설정해 debug 이하의 로그를 모두 출력하고
운영 서버에서는 info로 설정해 info 이하의 로그를 모두 출력하는 방식을 사용한다.
(운영 서버에서는 중요한 로그만 남겨야 한다)
@Slf4j
@RestController
public class LogTestController {
// private final Logger log = LoggerFactory.getLogger(getClass());
@RequestMapping("/log-test")
public String logTest() {
String name = "Spring";
System.out.println("name = " + name);
// 우선 순위 내림차순.
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);
return "check";
}
}
@Slf4j 애너테이션을 사용하면 로거 객체를 만들지 않아도 된다.
항상 하던대로 + 로 문자열을 concat해서 출력해도 되지만, + 를 사용하면 일단 문자열을 접합하는 연산이 수행된다.
출력하지도 않을 로그에 대해 연산을 수행해 CPU를 사용해 리소스를 낭비하는건 합리적이지 않다.
{} 를 사용하면 출력하지 않을 로그에 대해서는 연산을 수행하지 않아 리소스를 절약할 수 있다.
System.out.println( ) 메서드도 콘솔에 로그를 출력할 수 있지만, 그럼에도 로그 프레임워크를 사용해서 로그를 출력하는 이유는 다음과 같다.
1. 로그 레벨
앞서 살펴봤듯 로그 프레임워크는 로그 레벨을 설정해 로그의 중요성에 따라 다르게 처리할 수 있다.
(println 메서드로 작성하는 로그는 중요도가 모두 동일하게 취급된다)
2. 출력 대상
로그 프레임워크는 콘솔 말고도 파일, 데이터베이스 등에도 로그를 출력할 수 있다.
3. 성능
System.out.println( ); 메서드는 동기화된 메서드이기에 여러 쓰레드에서 출력 시도 시 쓰레드가 대기 상태에 걸릴 수 있다.
로그 프레임워크를 사용하면 비동기로 로그를 출력할 수 있어 성능을 향상시킬 수 있다.
'Spring > Spring' 카테고리의 다른 글
[Spring Basic] 웹 서버와 웹 애플리케이션 서버의 구조 (1) | 2023.06.14 |
---|---|
[Spring Basic] 예외처리 (0) | 2023.06.13 |
[Spring Basic] 빈의 생명주기와 스코프 (0) | 2022.08.09 |
[Spring Basic] 의존관계 주입 (0) | 2022.08.08 |
[Spring Basic] Singleton (0) | 2022.08.07 |
댓글
이 글 공유하기
다른 글
-
[Spring Basic] 웹 서버와 웹 애플리케이션 서버의 구조
[Spring Basic] 웹 서버와 웹 애플리케이션 서버의 구조
2023.06.14 -
[Spring Basic] 예외처리
[Spring Basic] 예외처리
2023.06.13 -
[Spring Basic] 빈의 생명주기와 스코프
[Spring Basic] 빈의 생명주기와 스코프
2022.08.09 -
[Spring Basic] 의존관계 주입
[Spring Basic] 의존관계 주입
2022.08.08