SPRING

로그

고민말고생각하는사람 2024. 8. 27. 20:43

로그? 로깅?

말 그대로 기록이다. 로깅은 기록을 남기는 행위이다.

 

목적

로깅은 왜 할까?

  • 유지보수 : 로그를 통해 앱 상태를 보다 빠르게 파악. 해결할 수 있다
  • 모니터링 : 비정상적인 동작이 로그라는 형태로 가시화 된다. 찾기 쉬워진다.
  • 디버깅 : 개발 중 발생한 오류 원인 추적이 쉬워진다.

 

로깅 레벨

로깅 레벨은 크게 아래와 같이 나뉜다.

  • trace : 가장 상세한 로그. 이 기록이 어디서 어떤 동작으로 통해 이루어졌고, 이 동작을 위해 어떤 내부 동작이 수행됐는지 파악할 수 있다. 정보량이 너무 크고 가시성이 떨어지는 것이 단점이다.
  • debug : 디버깅 목적으로 사용된다.
  • info : 시스템의 일반적 동작을 기록한다. 운영 단계에 사용한다.
  • warn : 말 그대로. 주의가 필요함을 알려준다. 시스템은 돌아간다.
  • error : 오류 발생을 알린다. 시스템이 빠그러졌거나 빠그러질 수 있음을 알려준다.

**fatal 레벨(치명적 오류)도 있다고 하는데, Spring에서 기본적으로 채택하고 있는 라이브러리 logback 에서는 지원하지 않는다고 한다. logback 에서 fatal 은 error 와 매핑된다.

** 스프링 프레임워크에서 기본적으로 제공하는 라이브러리는 logback 과 log4j2 이다.

** slf4j 는 다양한 로깅 라이브러리, 프레임워크를 유연하게 사용하도록 지원하는 인터페이스이다.

https://docs.spring.io/spring-boot/docs/2.1.13.RELEASE/reference/html/boot-features-logging.html

 

사용법

1. Slf4J 에서 제공하는 LoggerGactory 에 로그를 남길 클래스 정보를 인자로 넘겨 logger 호출

private final Logger logger = LoggerFactory.getLogger(getClass());

 

2. 문법에 맞춰 사용

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);

 

**아래와 같이 + 연산을 진행해도 작동은 하나,

동작 과정에서 문자열 + 문자열 연산이 발생하고(새로운 문자열 객체 생성 불가피)

불필요한 자원이 낭비되므로, 꼭 문법에 맞게 사용하자.

log.info(" info log=" + name);

 

번외

Server Side에서 System.out.println()을 사용하면 안 되는 이유

- 모르는 게 너무 많다. 보완해야 한다. 일단, 위험요소가 많다는 정도로 알고 넘어간다.