라벨이 로그인 게시물 표시

자바 로깅

간만에 Java Programming을 다시 시작했는데 Spring3.0을 보니 로깅이 모두 slf4j로 바뀌어져 있다. 음.. 그렇다. 요즘은 slf4j를 사용한다. 그럼 어떤 장점이 있어서 slf4j가 대세가 되었을까. commons-logging으로 로그를 남길 때 보통 아래 처럼 하게 된다. log.debug("리턴값을 로그로 남겨 봐야지~ 리턴값: [ " + abc(id) + "]" ); 위 코드는 무엇이 문제일까? 로깅레벨 설정을 error로 켜두면 debug 코드는 안찍는다. 하지만 비록 로그에 남지 않는다고 하더라고 실행은 된다. String끼리 더하기 연산도 실행되고 abc() 함수도 호출한다. 즉, 쓸 때없이 자원을 낭비하는게 첫번째 문제이다. 그래서 다음과 같이 할 수 있다. if (log.isDebugEnabled()) {     log.debug("리턴값을 로그로 남겨 봐야지~ 리턴값: [ " + abc(id) + "]"  ); } if(log.isDebugEnabled())를 집어 넣어서 로그 레벨이 debug가 아니라면 아예 건너뛰게 만들었다. log.isDebugEnabled()를 실행하는것도 리소스를 잡아 먹긴 하지만 부담이 큰 작업은 아니다. 하지만 이런식으로 하게 되면 코드가 지저분해진다. 게다가 로깅레벨이 여러단계일 때 if 문이 중첩될 수 있는 문제가 있다. 또 다른 문제는 로그 레벨이 debug로 설정되어 있을 때 발생한다. 로그 레벨이 debug일 때  if (log.isDebugEnabled())는 무의미한 코드가 되어 버린다. 작지만 리소스 낭비다. slf4j를 사용하면 아래처럼 바꿀 수 있다. log.debug("리턴값을 로그로 남겨 봐야지~ 리턴값: [ {} ]", abc(id)); 로그를 찍든 안찍든 String을 일단 더하고 보는 것과는 처리 방식이 다르다. {} 에는 abc(id)의 리턴값이 들어간다. ...