ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring Boot - SLF4J로 Log남기기
    Spring Boot 2023. 7. 1. 01:50
    반응형

    SLF4J란?

    SLF4J 로고
    SLF4J 로고

    Simple Logging Facade 4 Java(간단한 자바를 위한 로깅 파사드)

    SLF4J는 다양한 로깅 프레임워크에 대한 인터페이스 모음입니다.

    SLF4J는 많은 로깅 프레임워크를 하나의 방식으로 사용할 수 있는 방법을 제공해 줍니다.

     

    SLF4J는 인터페이스 프레임워크이기 때문에 단독으로 사용하지 않고, 로깅 프레임워크와 함께 사용합니다.

    스프링 부트에서는 기본적으로 SLF4JLogback을 사용하고 있습니다.

    SLF4J 공식 docs

     

    SLF4J Manual

    SLF4J user manual The Simple Logging Facade for Java (SLF4J) serves as a simple facade or abstraction for various logging frameworks, such as java.util.logging, log4j 1.x, reload4j and logback. SLF4J allows the end-user to plug in the desired logging frame

    www.slf4j.org

     

    로그 레벨

    로그의 레벨은 5개입니다.

    출력 레벨의 설정에 따라 설정 레벨과 그보다 레벨이 높은 로그를 출력합니다.

     

    아래로 내려갈수록 높은 레벨입니다. 

    1. trace: debug레벨보다 더 상세한 정보를 표시

    2. debug: 디버깅을 위한 정보를 표시

    3. info: 정보성 로그를 표시

    4. warn: 시스템 에러의 원인이 될 수 있는 경고성 메시지를 표시

    5. error: 요청을 처리하는 중 오류가 발생한 경우 표시

     

    로그 레벨 설정

    logback설정 또는 스프링 설정(application.properties or yml)에서 레벨 설정이 가능합니다.

    application.properties 설정
    
    전체 레벨 설정
    logging.level.root=info
    
    패키지별 레벨 설정
    logging.level.org.springframework=info
    logging.level.org.hugopark.test=debug

     

    로그 찍기

    Logger 객체

    Logger객체를 불러와야 로그를 찍을 수 있다.

    Logger객체를 불러오는 방법은 LoggerFactory와 어노테이션 @Slf4j 가 있습니다.

    // LoggerFactory
    private final Logger log = LoggerFactory.getLogger(getClass())
    // @Slf4j 어노테이션
    @Slf4j
    public class ExampleService {
    
    }

     

    Logger 사용하기

    logger는 기본적으로 치환문자를 지원합니다.

     

    주의할 점)

    로그를 찍을 때 문자와 문자열을 직접 연산하게 되면 로그를 찍기도 전에 문자열 연산이 일어나서 컴퓨팅 자원을 사용하기 때문에 성능이 떨어지게 되어서 잘못된 사용법입니다. 치환을 애용합시다..

    치환을 사용하면 성능 개선도 되고, 로그를 찍는 코드의 가독성도 높아지기 때문에 치환을 사용해야 합니다.

     

    올바른 예

    String name = "박종연";
    log.debug("hello, {}", name);

     

    틀린 예

    String name = "박종연";
    log.debug("hello, "+name);

     

    예외 로그 찍기

    Exception Stack Trace

    SLF4J는 Throwable객체를 파라미터로 넘기게 되면 Stack Trace를 로깅시켜 줍니다.

    try {
    	throw new Exception();
    } catch(Exception ex) {
    	log.error("Error on: ", ex);
    }
    
    ->
    
    Error on:
    java.lang.Exception: Test
    	at hello.itemservice.web.basic.BasicItemController.init(BasicItemController.java:38) ~[classes/:na]
    	at hello.itemservice.web.basic.BasicItemControllerTest.initTest(BasicItemControllerTest.java:25) ~[classes/:na]
    	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
    	...

     

    Exception Message

    Exception Message는 치환문자를 이용하여 exception의 메세지를 넘겨주면 됩니다.

    try {
    	throw new Exception("Error Message Test");
    } catch(Exception ex) {
    	log.error("Error Message: {}", ex.getMessage());
    }
    반응형

    'Spring Boot' 카테고리의 다른 글

    2022.07.06 Spring Mock 사용해보기  (0) 2022.07.06

    댓글

Designed by Tistory.