본문 바로가기
Java

slf4j error log 포맷

by ybs 2021. 11. 17.
반응형

String 문자열을 Integer 로 바꾸면 NumberFormatException 이 발생한다. 문제가 되는 변수 s 와 예외인 e 를 에러로그로 같이 출력하고 싶다면 아래처럼 만들 수 있다.

String s = "Hello world";
try {
  Integer i = Integer.valueOf(s);
} catch (NumberFormatException e) {
  logger.error("Failed to format {}", s, e);
}

 

그런데 해당 error 메서드 인자를 보면 String var1, Object var2, Obejct var3 다. 즉 exception 파라미터가 Object로 받게 된다. 

package org.slf4j;

public interface Logger {

  ... 
  
  void error(String var1, Object var2, Object var3);
    
  ...
}

 

그래서 Throwable 을 받을 수 있도록 에러로그를 아래와 같이 수정한다.

log.error("this is error message : " + s, ex);
package org.slf4j;

public interface Logger {

  ... 
  
  void error(String var1, Throwable var2);
    
  ...
}

 

하지만 그렇게 하지 않아도 된다. slf4j 는 마지막 파라미터에 exception 이 있으면 알아서 stack trace 와 함께 NumberFormatException 을 출력한다(단 1.6.0 부터 가능, 그 이하 버전은 NumberFormatException 무시된다). 

 

slf4j 가 개발자의 가장 가능성 있는 의도에 따라 Object 가 아닌 Throwable 로 해석을 한다. 만약 exception 파라미터를 마지막 인자로 안넣으면 일반 Object 로 다뤄서 stack trace 는 출력되지 않는다(그런데 그렇게 로그 만들면 안된다).

 

원문 : http://www.slf4j.org/faq.html#paramException

반응형