Spring Logging(feat.lombok)

강정우·2023년 12월 2일
1

Spring-boot

목록 보기
30/73
post-thumbnail

logging

  • 보면 logback과 slf4j가 있는데 둘다 로그라이브러리이다.
    로그 라이브러리는 Logback, Log4J, Log4J2 등등 수 많은 라이브러리가 있는데, 그것을 통합해서 인터페이스로 제
    공하는 것이 바로 SLF4J 라이브러리다.

  • 쉽게 이야기해서 SLF4J는 인터페이스이고, 그 구현체로 Logback 라이브러리를 선택한 것이다.

  • 참고로 RestController는 나중에 또 포스팅하겠지만 Controller만 쓰면 그냥 ModelandView를 반환하는데 RestController를 사용하면 rest api의 Rest로 나와서 그냥 http body에 넣어주겠다는 것이다.
@RestController
public class LogTestController {
    private final Logger logger = LoggerFactory.getLogger(getClass());

    @RequestMapping("/log-test")
    public String logTest() {
        String name = "Spring ";
        logger.trace("trace log = {}", name);
        logger.debug("debug log = {}", name);
        logger.info("info log = {}", name);
        logger.warn("warn log = {}", name);
        logger.error("error log = {}", name);
        return "ok";
    };
}

  • 그리고 해당 로그를 사용하면 위와같은 사진을 만나볼 수 있는데 그냥 print를 찍는것과는 다르게 시간, 프로세스 번호, 쓰레드 풀에서 가져온 쓰레드 등 굉장히 다양한 정보가 표시된다.
    로그가 출력되는 포멧은 시간, 로그 레벨, 프로세스 ID, 쓰레드 명, 클래스명, 로그 메시지

  • 그리고 logger.info("trace log = {}", name);에서 {}를 더 쓰고 변수를 더 사용하면 그게 치환되는 것이다.
    logger.info("trace log = {}, {}", name, name2);

  • 그리고 로그를 찍어보면 trace와 debug는 안 나오는데 그것도 보고싶다면 application properties에 따로 옵션을 명시해주면 된다.
# hello.springmvc 패키지와 그 하위 레벨 로깅 설정
logging.level.hello.springmvc=trace

  • 그래서 보면 trace>debug>info 순으로 레벨이 설정되어있다.
    보통 개발환경에서는 debug로 세팅해두고 실제 운영 서버에는 info 레벨로 세팅해둔다.

LEVEL: TRACE > DEBUG > INFO > WARN > ERROR
개발 서버는 debug 출력
운영 서버는 info 출력(default 왜냐하면 기본이 아래와 같이 설정되어있기 때문이다.)

loggin.level.root=info

로그선언

private Logger log = LoggerFactory.getLogger(getClass());
private static final Logger log = LoggerFactory.getLogger(Xxx.class)
@Slf4j : 롬복 사용 가능

@SLF4J

  • 그리고 어노테이션을 등록해두면 귀찮게 private final Logger logger = LoggerFactory.getLogger(getClass()); 이렇게 생성자를 작성하지 않아도 된다.
    이는 롬복에서 지원해주는 기능이다.

주의점

log.debug("data="+data)
log.debug("data={}", data)
  • 로그를 찍을 때 +를 하여 작성하면 안 된다. 이는 java 언어의 특징과 관련이 있는데
    물론 결과는 똑같지만 + 연산자가 들어감으로써 log 레벨이 info라서 debug가 찍히지도 않음에도 + 연산자 때문에 메모리 리소스를 사용하한다.

로그 사용시 장점

  • 쓰레드 정보, 클래스 이름 같은 부가 정보를 함께 볼 수 있고, 출력 모양을 조정할 수 있다.
    로그 레벨에 따라 개발 서버에서는 모든 로그를 출력하고, 운영서버에서는 출력하지 않는 등 로그를 상황에 맞게
    조절할 수 있다.
  • 시스템 아웃 콘솔에만 출력하는 것이 아니라, 파일이나 네트워크 등, 로그를 별도의 위치에 남길 수 있다. 특히 파
    일로 남길 때는 일별, 특정 용량에 따라 로그를 분할하는 것도 가능하다.
  • 성능도 일반 System.out보다 좋다. (내부 버퍼링, 멀티 쓰레드 등등) 그래서 실무에서는 꼭 로그를 사용해야 한
profile
智(지)! 德(덕)! 體(체)!

0개의 댓글