로깅(logging)이란?
컴퓨팅에서 로그파일(logfile)은 운영 체제나 다른 소프트웨어가 실행 중에 발생하는 이벤트나 각기 다른 사용자의 통신 소프트웨어 간의 메시지를 기록한 파일이다. 로그를 기록하는 행위는 로깅(logging)이라고 한다.
출처: 로그파일 위키백과
💡운영 시스템에서는 System.out.println() 같은 시스템 콘솔을 사용해서 필요한 정보를 출력하지 않고, 별도의 로깅 라이브러리를 사용해서 로그를 출력한다.
로깅 라이브러리
스프링 부트 라이브러리를 사용하면 스프링 부트 로깅 라이브러리( spring-boot-starter-logging )가 함께 포함된다. 스프링 부트 로깅 라이브러리는 기본으로 다음 로깅 라이브러리를 사용한다
- SLF4J - http://www.slf4j.org
- Logback - http://logback.qos.ch
SLF4J(Simple Logging Facade for Java) 와 Logback 이 기본 로깅 라이브러리로 제공된다.
SLF4J는 다양한 로깅 프레임워크(예: log4j, logback, java.util.logging 등)와 상호 호환되며, 로그 라이브러리에 대한 의존성을 줄일 수 있다.
즉, SLF4J는 인터페이스이고, 그 구현체로 Logback 같은 로그 라이브러리를 선택하면 된다.
실무에서는 스프링 부트가 기본으로 제공하는 Logback을 대부분 사용한다
Logger 인터페이스
Logger 인터페이스는 org.slf4j.Logger 패키지에서 제공된다.
getLogger() 메서드를 사용하여 Logger 객체를 가져와서 다양한 로그 레벨(trace, debug, info, warn, error)을 사용하여 로그를 기록할 수 있다. 예를 들어, 다음과 같이 Logger를 생성하고 info 레벨의 로그를 기록할 수 있다.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MyClass {
private static final Logger logger = LoggerFactory.getLogger(MyClass.class);
public void logTest() {
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);
}
}
@Slf4j 애너테이션
롬복(Lombok) 라이브러리를 사용하면 Logger를 선언하는 코드를 줄일 수 있다.
롬복의 @Slf4j 애너테이션을 사용하면 클래스 내에서 Logger 객체를 생성할 필요 없이 Logger 객체를 사용할 수 있다.
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class MyClass {
public void logTest() {
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);
}
}
로그 레벨 설정
스프링에서는 로그 레벨을 설정하여 원하는 수준의 로그만 기록하도록 구성할 수 있다.
로그 레벨은 상위 레벨에서 하위 레벨로 나뉘고, 설정된 로그 레벨보다 높은 로그 레벨의 메시지는 기록되지 않는다.
- LEVEL: TRACE > DEBUG > INFO > WARN > ERROR
- 개발 서버는 debug 출력
- 운영 서버는 info 출력
application.properties
#전체 로그 레벨 설정값(기본 info)
logging.level.root=info
#hello.springmvc 패키지와 그 하위 로그 레벨 설정 (우선권을 가짐)
logging.level.hello.springmvc=debug
로그의 올바른 사용법
log.debug("data="+data) ❌
로그 출력 레벨을 info로 설정해도 해당 코드에 있는 "data="+data가 실제 실행이 되어 버린다. 결과적으로 문자 더하기 연산이 발생한다
log.debug("data={}", data) ⭕️
로그 출력 레벨을 info로 설정하면 아무일도 발생하지 않는다. 따라서 앞과 같은 의미없는 연산이 발생하지 않는다.
로그 사용시 장점
➜ 부가 정보를 함께 볼 수 있다.
로그에는 쓰레드 정보, 클래스 이름, 메소드 이름 등의 부가 정보를 함께 출력할 수 있다. 이를 통해 어떤 쓰레드에서 어떤 메소드가 호출되었는지 등을 파악할 수 있다.
➜ 로그 레벨에 따라 로그를 출력할 수 있다.
로그 레벨에 따라 출력할 로그를 선택할 수 있다. 개발 서버에서는 모든 로그를 출력하고, 운영서버에서는 필요한 정보만 출력하도록 조절할 수 있다.
➜ 로그를 파일이나 네트워크 등에 남길 수 있다.
로그를 파일이나 네트워크 등에 남길 수 있으므로, 시스템 아웃 콘솔에만 출력하는 것이 아니라 다른 위치에서 로그를 확인할 수 있다. 파일에 남길 때는 일별, 용량 등에 따라 로그를 분할할 수도 있다.
➜ 성능이 우수하다.
로그는 내부적으로 버퍼링과 멀티 쓰레드 등의 기술을 사용하여 성능이 일반 System.out보다 좋다.
출처 : 인프런 - 스프링 MVC 1편 by 우아한형제 김영한이사님
'Spring > Spirng MVC - 기본기능' 카테고리의 다른 글
| 스프링 - HTTP 요청 파라미터 - @ModelAttribute (0) | 2023.03.28 |
|---|---|
| 스프링 - HTTP 요청 파라미터 - @RequestParam (0) | 2023.03.28 |
| 스프링MVC - HTTP 요청 데이터 조회 (0) | 2023.03.28 |
| 스프링MVC - HTTP 요청 - 기본, 헤더 조회 (0) | 2023.03.28 |
| 스프링MVC - 요청 매핑(@RequestMapping) (0) | 2023.03.27 |