본문 바로가기

개발개발

Simple Logging Facade for Java

SLF4J는 java.util.logging나 log4j같은 다양한 자바 로깅 프레임워크에 대해 간단한 facade를 제공한다.

일반적으로 common-logging 에서 로깅을 사용하는 방법은 다음과같다.
  logger.debug(this.getClass().getName() + "|"
						+ forwardPage.getName() + "|"
						+ (System.currentTimeMillis() - time));
이대로 방치하면 debug 수준의 로그를 원치 않을때에도 .debug() 메소드가 동작을 하면서 문자열을 생성한다. 문자열에 대한 처리는 상당히 오버헤드가 크므로 이를 해결하기 위해서 다음처럼 코드를 작성한다.
if (logger.isDebugEnabled()) {
				logger.debug(this.getClass().getName() + "|"
						+ forwardPage.getName() + "|"
						+ (System.currentTimeMillis() - time));
			}
이렇게 로깅메시지를 생성하기 전에 로깅수준을 먼저 판별하도록 한다.
그렇지만 이것도 문제가 있는게, 여러가지 로깅수준의 메시지를 섞어사용하게 되면, 코드가 상당히 지저분해진다.
if(logger.isDebugEnabled(){
....some code...
}
....
if(logger.isInfoEnabled(){
....some code...
}
끔찍해지는군....이리하여 구원투수로 등장한놈이 SLFJ.
logger.debug("{}|{}|{}", 
this.getClass().getName(), forwardPage.getName(), (System.currentTimeMillis() - time));
SLFJ는 포맷팅앵커{} 를 사용하여, 로깅을 남길 필요가 없을때는 문자열을 구성하지 않는다.
게다가 복잡한 isXXXXEnable()의 사라짐으로 인해 코드 가독성까지 향상된다.

참조 : http://www.slf4j.org/index.html