본문 바로가기

나는개발자다/기타

Slf4J 사용하기. ( slf4j, log4j )


현재 추세는 Slf4J인 듯 하다. 사용하기 편하고 성능또한 좋다.

여하튼 지금 Slf4J를 가볍게 알아보자. 

slf4j는 jdk, common_log, log4j 등등의 로깅 framework를 통합해서 사용할 수 있는 로깅 framework이다.
 
여기서는 slf4j와 log4j를 연동해서 사용하는 방법을 알아본다. 


1. slf4j down  ( 2011년 7월 20일 버전 : 1.6.1 )
    http://www.slf4j.org/download.html  

2. slf4j와 log4j를 위한 필수 jar들
  • slf4j-api-1.6.1.jar       
  • log4j-1.2.16.jar
  • slf4j-log4j12-1.6.1.jar
3. 실행하기. 
 
  • TEST 1

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HelloWorld {
  public static void main(String[] args) {
    Logger logger = LoggerFactory.getLogger(HelloWorld.class);
    logger.info("Hello World");
  }
}

위 class를 작성 하고 eclipse에서slf4j-api-1.6.1.jar 를 Build Path에 추가한 후 실행 해 보자.


SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further
details.

위와 같은 에러 메세지가 나올것이다.
slf4j에서 binding 할 Loggig framework를 찾지 못해서 나온 에러이다.
 
  • TEST2
     
slf4j-simple-1.6.1.jar 파일을 Eclipse의 Build Path에 추가한 후 실행해본다.

 0 [main] INFO HelloWorld - Hello World 
로깅 출력이 되엇다.

기본적인 SLF4J 설정이 완료 되었다.



4. LOG4J와 SLF4J 연동하기.

별 다른 것은 없다.
Eclipse의 BuildPath에 log4j-1.2.16.jar와 slf4j-log4j12-1.6.1.jar를 추가하면 된다.
slf4j-log4j12-1.6.1.jar는 slf4j와 log4j의 바인딩 역활을 하고 log4j-1.2.16.jar는 log4j를 위한 jar이다.

Test code를  작성해보자.

import org.slf4j.LoggerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class HelloWorld {

	private static Logger client= LoggerFactory.getLogger("client");
	private static Logger server = LoggerFactory.getLogger("server");

	public static void main(String[] args) {
	        Logger logger = LoggerFactory.getLogger(HelloWorld.class);
	        logger.info("{}","Hello World");  // 바뀐 부분
		client.debug("{}", "client");     // 밑에서 추가 설명
		server.debug("{}", "server");     // 밑에서 추가 설명
	}
}

logger.info("{}","Hello World"); <-- 이 부분이 바뀌엇다.
{}안에 "hello workd"가 입력이 되서 출력이 된다는 것으로 이해 할 수 있다.
이 것때문에 slf4j를 사용해야 좋다는 것이다.

5. 로깅 레벨 조절하기
log4j에는 info, debug, error 등의 로깅 레벨이 있다.
보통 개발 할 때는 info, debug로 사용하고 실제 서비스 할 때는 error로 로깅 레벨을 변경하고 파일로
저장한다.
여기서는 log4j.xml를 이용하였다. 




	
		
			
		
	

	
	
	
	
		
		
		
		
			
		
	
	
		
	

	
		
	
	
		
		
		
	



xml 맨 밑에 root가 있다.
priority value=info로 되어있다. 이 부분을 debug or error로 변경 후 HelloWorld를 실행하면
[2011-07-20 12:48] DEBUG [HelloWorld(main:13)] :client
[2011-07-20 12:48] DEBUG [HelloWorld(main:14)] :server 

위처럼 출력하게 된다. 
logger.info("{}","Hello World");의 로깅레벨이 error로 바뀌어서 info는 출력되지 않는다.

프로젝트 단위가 크게 되면 로깅도 많아지고 결국 쉽게 볼 수 없게 된다.
이럴 경루 특성에 따라 로깅 종류를 만들어 사용할 수 있다.
 예를 들면 DB에 관련된 로깅, Server에 관련된 로깅을 구분한다.

xml를 보면 
<category name="server">
<category name="client">
2개의 카테고리가 있다.

server, client의 
<priority value="DEBUG">를 이용해서 필요한 로그 정보만 볼 수 있다.


client의 priority를 error로 변경 후 실행하면  

 [2011-07-20 12:48] DEBUG [HelloWorld(main:14)] :server 

 위 처럼 출력된다. 즉 필요한 로깅 정보만 볼 수 있다. 아주 유용한 기능이다.

로그 정보를 하나의 category로 만들어서 사용하지 말고 되도록이면 category를 나누고 로그 정보를 따로 관리하는 방법이 매우 유용하다.



eclipse project down..



왜 SLF4J를 사용하는지 이유가 있다. 꼭 읽어봐야 한다.
http://chanwook.tistory.com/727