LOG4J와 SLF4J 연동하기.
Eclipse의 BuildPath에
log4j-1.2.17.jar와 slf4j-log4j12-1.7.5.jar를 추가하면 된다.
slf4j-log4j12-1.7.5.jar는 slf4j와 log4j의 바인딩 역활을 하고
log4j-1.2.17.jar는 log4j를 위한 jar이다.
*/
import org.slf4j.LoggerFactory;
import org.slf4j.Logger;
public class Log4J_Sample006_slf4J {
private static Logger client = LoggerFactory.getLogger("client");
private static Logger server = LoggerFactory.getLogger("server");
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger(Log4J_Sample006_slf4J.class);
logger.info("{}", "Hello World"); // 바뀐 부분
client.debug("{}", "client"); // 밑에서 추가 설명
server.debug("{}", "server"); // 밑에서 추가 설명
}
}
/*
logger.info("{}","Hello World"); <-- 이 부분이 바뀌엇다.
{}안에 "hello world"가 입력이 되서 출력이 된다는 것으로 이해 할 수 있다.
이 것때문에 slf4j를 사용해야 좋다는 것이다.
로깅 레벨 조절하기
log4j에는 info, debug, error 등의 로깅 레벨이 있다.
보통 개발 할 때는 info, debug로 사용하고 실제 서비스 할 때는 error로 로깅 레벨을 변경하고
파일로 저장한다.
여기서는 log4j.xml를 이용하였다.
<?xml version="1.0" encoding="UTF-8" ?-->
<log4j:configuration>
<appender name="stdout" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm}] %5p [%C{1}(%M:%L)] :%m%n%n">
</layout>
</appender>
<!-- 날짜별 로그 <appender name="dailyout" class="org.apache.log4j.DailyRollingFileAppender"> -->
<appender name="file" class="org.apache.log4j.DailyRollingFileAppender">
<param name="file" value="./logs/dailyout.log">
<param name="Append" value="true">
<param name="DatePattern" value="'.'yyMMdd">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%t> [%d{yyyy-MM-dd HH:mm:ss}] [%c{1}]
[%L] [%p] %m %n">
</layout>
</appender>
<category name="client">
<priority value="DEBUG">
</priority>
</category>
<category name="server">
<priority value="DEBUG">
</priority>
</category>
<root>
<priority value="INFO">
<appender-ref ref="stdout">
<appender-ref ref="file">
</appender-ref></appender-ref></priority></root>
</log4j:configuration>
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를 나누고
로그 정보를 따로 관리하는 방법이 매우 유용하다.
*/