반응형
📄 Log란?
서버 컴퓨터의 운영 단계에서 기록된 데이터를 출력한 후 별도로 저장을 하기 위해 System.out.println 대신에 사용하는 것입니다.
📄 다양한 Log 선언 방법
순수 JAVA로 Log 선언
@RestController
public class LogTestController {
//@Slf4j 어노테이션으로 Log 선언 시 생략 가능
private final Logger log = LoggerFactory.getLogger(getClass());
@RequestMapping("/log-test")
public String logTest(){
String name = "Spring";
System.out.println("name = " + name);
log.info(" info log={}", name);
return "ok";
}
}
결과 화면
@Slf4j 어노테이션으로 Log 선언(Lombok 라이브러리 추가 시 사용 가능)
@Slf4j
@RestController
public class LogTestController {
@RequestMapping("/log-test")
public String 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);
return "ok";
}
}
결과 화면
참고: 순수 JAVA로 Log 선언 코드와 어노테이션으로 Log 선언 코드는 같은 코드입니다.
하지만 어노테이션을 사용할 시 DI 멤버 변수 선언을 생략할 수 있습니다.
참고: SLF4J 라이브러리는 인터페이스, 실제 구현체는 Logback입니다.
구현체의 종류는 Logback, Log4J, Log4J2 등등 수 많은 라이브러리가 있습니다.
📄 Log 레벨의 종류
- trace
- debug ( 개발 단계 )
- info ( 운영 단계 )
- warn
- error
참고: log.debug의 경우에는 개발 단계에 많이 사용 되며,
log.info의 경우에는 실제 운영 단계에서 많이 사용됩니다.
📄 Log 사용시 장점
- 시간, 로그 레벨, PID(프로세스 ID), 쓰레드 정보, 클래스 정보 등을 조정할 수 있습니다.
[ 날짜 ] [ Log 레벨 ] [ PID ] --- [ 쓰레드 정보 ] 클래스 정보 : [ Log 출력물 ]
- 개발 서버에서의 로그와 운영 서버에서의 로그를 상황에 맞게 조절할 수 있습니다.
또한 패키지 별로 로그 레벨을 다르게 설정할 수 있습니다.
application.properties
#전체 로그 레벨 설정(기본 info)
logging.level.root=info
#hello.springmvc 패키지와 그 하위 로그 레벨 설정
logging.level.hello.springmvc=trace
- 파일이나 네트워크 등 로그를 별도의 위치에 남길 수 있습니다.
특히 파일로 로그를 남길 경우에는 날짜별, 용량별로 로그를 분할할 수 있습니다. - System.out.println보다 성능적으로 좋습니다.
📄 올바른 Log 사용 방법
@Slf4j
@RestController
public class LogTestController {
// private final Logger log = LoggerFactory.getLogger(getClass());
@RequestMapping("/log-test")
public String logTest(){
String name = "Spring";
// 올바른 Log 사용 방법 🟢
log.info(" info log={}", name);
// 틀린 Log 사용 방법 ❌
log.info(" info log" + name);
return "ok";
}
}
참고: 로그 출력 레벨을 info로 설정해도 해당 코드에 있는 " info log=" + name이 실제 실행이 되어 버립니다.
결과적으 로 + 연산이 발생하여 메모리의 낭비가 발생합니다.
따라서 로그를 출력할 때에는 log.info(" info log={}", name) 형식으로 사용해야합니다.
📄 변수 2개 이상 출력 방법
@Slf4j
@RestController
public class LogTestController {
// private final Logger log = LoggerFactory.getLogger(getClass());
@RequestMapping("/log-test")
public String logTest(){
String name = "Spring";
int age = 21;
log.info("name={}, age={}", name, age);
return "ok";
}
}
반응형
'JAVA & Spring' 카테고리의 다른 글
[ Spring ] @Autowired, @Resource, @Inject 차이점 아주 쉽게 정리 (1) | 2024.10.16 |
---|---|
[Spring Boot] Thymeleaf decoupled logic Config 등록 방법 (0) | 2024.04.01 |
[Spring] 인텔리제이 Lombok(롬복) 추가 하는 방법(gradle, maven) (0) | 2024.01.10 |
[Spring Security] WebSecurityConfiguration 총정리 (0) | 2023.09.12 |
[postman][Spring] JPA 라이브러리로 API 전송 시 NULL 값 발생 해결 방법 (0) | 2023.08.26 |
댓글