java-school logo

로깅

프로젝트에 자카르타의 commons-logging을 사용하고, 로깅 구현체로 log4j를 사용하기로 한다.
http://commons.apache.org/proper/commons-logging/download_logging.cgi 에서 Binary 파일을 내려받는다.
또는 http://www.apache.org로 방문해서 Projects 중에 commons을 선택한다. http://commons.apache.org로 이동하는데 여기서 Logging을 선택하면 찾을 수 있다.
압축을 풀고 commons-logging-1.2.jar 파일을 찾아 /WEB-INF/lib에 복사한다.

log4j 바이너리 파일을 내려받는다.
http://logging.apache.org/log4j/1.2/download.html
압축을 풀고 log4j-1.2.17.jar 파일을 찾아 /WEB-INF/lib에 복사한다.

log4j 설정 파일을 작성한다.
아래 내용으로 log4j.xml 이름으로 /WEB-INF/classes에 복사한다.
이클립스에서 작업한다면 src 폴더에 log4j.xml 파일을 만들면 자동으로 /WEB-INF/classes에 log4j.xml 파일이 만들어진다.
log4j.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="console" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.SimpleLayout"/>
    </appender>
	
    <appender name="file" 
    	class="org.apache.log4j.DailyRollingFileAppender">
        <param name="File" 
        	value="C:/www/JSPProject/WebContent/WEB-INF/debug.log" />
        <param name="datePattern" value="'.'yyyy-MM-dd" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern"
                value="[%d]%5p [%t] (%F:%L) - %m%n"/>
        </layout>
    </appender>
    
    <logger name="net.java_school">
        <level value="DEBUG"/>
        <appender-ref ref="file"/>
    </logger>
    
    <root>
        <level value="INFO"/>
        <appender-ref ref="console"/>
    </root>

</log4j:configuration>
자카르타 commons-logging 설정 파일을 만든다.
commons-logging.properties라는 파일을 아래 내용으로 만들고 WEB-INF/classes에 복사한다.
이클립스에서 작업한다면 src 폴더에 파일을 복사한다.
commons-logging.properties
org.apache.commons.logging.Log = org.apache.commons.logging.impl.Log4JLogger

로깅 테스트

아래 예제는 웹 애플리케이션이 아닌 일반 자바 파일이다.
따라서 콘솔에 출력하는 로그 메시지를 톰캣의 로그 파일에서 찾으려 해서는 안 된다.
이클립스에서 테스트하면 Console 뷰에 로그가 출력된다.
/WEB-INF/debug.log 파일에도 로그가 쌓인다.
LogTest.java
package net.java_school.logtest;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class LogTest {
	private Log log = LogFactory.getLog(LogTest.class);
	// 또는 private Log log = LogFactory.getLog(this.getClass());
	
	public void x() {
		if (log.isDebugEnabled()) {
			log.debug("debug message");
		}
	}
  
	public static void main(String[] args) {
		LogTest test = new LogTest();
		test.x();
	}
}
참고