'log4j'에 해당되는 글 1건

  1. [scrap] Log4j를 위한 여러가지 환경설정(xml property) 2008.04.28
이번글은 XML을 이용한 property설정을 이용하여 jakarta-log4j의 환경설정 및
테스트 구동파일에 대한 사용방법을 설명한다.

기본적으로 log4j를 다운로드 받아야 하며, 이 패키지는 퍼포먼스최적화,
수행중의 다른 프로그램과의 충돌등에서 여러 가지 사항을 고려한 패키지이며,
가장 간단하게 로그를 기록하고 볼수 있는 좋은 패키지이다..

우선 log4j를 다운받아 클래스패스에 추가하여 애플리케이션 형태로 도는 프로그램을
테스트해보도록 한다.


1. Log4J환경설정방법
 - jakarta.apache.org에서 log4j의 최신판(binary)을 다운로드 받는다.
 - 압축을 푼후 log4j library파일을 클래스 패스에 추가한다.


2. Log4J의 두가지 프로퍼티 형태
   Log4J는 일반적으로 XML형태의 설정을 가진 property와 properties형태로 읽어들이는
   두가지의 종류가 있다. 보통 개발을 할 경우 property파일을 이용하는 경우는 많으나
   xml에 대한 설정방법 및 환경에 대한 한글참조가 없어서 여기서는 xml을 이용한
   DOMConfigurator를 사용하여 샘플테스트를 해보도록 하겠다.


3. 샘플프로그램
   우선 내가 원하는 logger클래스를 사용할 수 있는 클래스를 팩토리패턴을 구사하여
   만들어보도록 하겠다.

   이파일은 LogUtil이란 클래스를 사용하였으며 본사이트에도 적용되어 있다.

/*
 * @(#)LogUtil.java 1.00 2003.02.01
 *
 * Copyright Choi Ji Woong,  All Rights Reserved.
 *
 *
 */
import org.apache.log4j.Logger;
import org.apache.log4j.xml.DOMConfigurator;

import java.io.IOException;
import java.net.URL;


/**
 * XML Property logger test이네요..히히
 *
 *
 * @author  놀새(ienvyou@jlook.com)
 * @version 1.00, 2003.02.01
 * @since   log4j-1.2.7
 */

public class LogUtil {
    //private static Logger logger = LogUtil.getLogger(OtherClass.class);
 public static void init(String xmlFile) {
  String resource = xmlFile;
        URL configFileResource = LogUtil.class.getResource(resource);
 // System.out.println("URL =======> " + configFileResource +
 " ::::: " + configFileResource.getFile());
        //DOMConfigurator.configure(configFileResource.getFile());
  DOMConfigurator.configure(xmlFile);
 }

 public static Logger getLogger(Class c) {
  return Logger.getLogger(c);
 }
}

다음은 해당 클래스를 테스트해볼수 있는 세개의 클래스를 나열해보도록 하겠다.

/*
 * @(#)OtherClass.java 1.00 2003.02.01
 *
 * Copyright Choi Ji Woong,  All Rights Reserved.
 *
 *
 */
import org.apache.log4j.Logger;
import org.apache.log4j.xml.DOMConfigurator;

import java.io.IOException;
import java.net.URL;


/**
 * XML Property logger test이네요..히히
 *
 *
 * @author  놀새(ienvyou@jlook.com)
 * @version 1.00, 2003.02.01
 * @since   log4j-1.2.7
 */

public class OtherClass {
    public OtherClass() {
  Logger logger = LogUtil.getLogger(OtherClass.class);
  logger.debug("Other Class debug");
  logger.info("Other Class info");
  logger.warn("Other Class warn");
  logger.fatal("Other Class fatal");
  logger.error("Other Class error");
 }
}

/*
 * @(#)XMLPropertiesFileLoggerTest.java 1.00 2003.02.01
 *
 * Copyright Choi Ji Woong,  All Rights Reserved.
 *
 *
 */
import org.apache.log4j.Logger;
import org.apache.log4j.xml.DOMConfigurator;

import java.io.IOException;
import java.net.URL;


/**
 * XML Property logger test이네요..히히
 *
 *
 * @author  놀새(ienvyou@jlook.com)
 * @version 1.00, 2003.02.01
 * @since   log4j-1.2.7
 */

public class XMLPropertiesFileLoggerTest {
   

    public static void main(String argv[]) {
  LogUtil.init(argv[0]);
        Logger logger = LogUtil.getLogger(XMLPropertiesFileLoggerTest.class);
        // Add a bunch of logging statements ...
        logger.debug("Hello,놀새1~");
        logger.debug("Hello,놀새2~");
        logger.debug("Hello,놀새3~");
        logger.debug("Hello,놀새4~");
        logger.debug("Hello,놀새5~");

        logger.info("놀새정보1");
        logger.info("놀새정보2");
        logger.info("놀새정보3");
        logger.info("놀새정보4");
        logger.info("놀새정보5");

        logger.warn("아뛰~ 워닝이야~1");
        logger.warn("아뛰~ 워닝이야~2");
        logger.warn("아뛰~ 워닝이야~3");
        logger.warn("아뛰~ 워닝이야~4");
        logger.warn("아뛰~ 워닝이야~5");

        logger.error("헉뚜~~ 에러야1");
        logger.error("헉뚜~~ 에러야2" , new IOException("아~ 뛰바~"));
        logger.error("헉뚜~~ 에러야3");
        logger.error("헉뚜~~ 에러야4" , new IllegalStateException("Error !!"));


        logger.fatal("엇..치명타다1");
        logger.fatal("엇..치명타다2" , new SecurityException("Fatal Exception"));
        logger.fatal("엇..치명타다3");
        logger.fatal("엇..치명타다4" , new SecurityException("Fatal Exception"));

  new OtherClass();
    }
}


위와 같이 작성이 될 수 있으며 실행방법은

컴파일
javac -classpath %LOG4J_HOME%\lib\log4j-1.2.7.jar; XMLPropertiesFileLoggerTest.java


실행
java -classpath %LOG4J_HOME%\lib\log4j-1.2.7.jar; XMLPropertiesFileLoggerTest config.xml

다음페이지에서는 여러가지 환경설정을 할 수 있는 xml파일을 소개한다.


1. console appender
<!--
콘솔에 로그를 기록하는 샘플입니다.
org.apache.log4j.ConsoleAppender 사용
-->
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration>

<appender name="A1" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
 <param name="ConversionPattern" value="%d %-5p [%t] %-17c{2} (%13F:%L) %3x - %m%n"/>
</layout>
</appender>


<root>
<priority value ="debug" />
<appender-ref ref="A1"/>
</root>

</log4j:configuration>


2. File appender
<?xml version="1.0" encoding="euc-kr" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<!--
파일에 로그를 기록하는 샘플입니다.
기본적으로 로그파일의 이름을 기록할 수 있으며
해당설정은 root logger에 설정되어 있는 내용을 참조하여 설정이 가능합니다.
아래의 설정파일은 매일로그를 남길수 있는 형태여서 형태가 다양하게 나타날수 있습니다.
날짜변경이 되면 자동으로 로그가 바뀝니다.
-->
<log4j:configuration>

<appender name="A1" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="ienvyou.log"/>
<param name="Append" value="false"/>
<param name="DatePattern" value="'.'yyyy-MM-dd"/>
<layout class="org.apache.log4j.PatternLayout">
 <param name="ConversionPattern" value="%d %-5p [%t] %-17c{2} (%13F:%L) %3x - %m%n"/>
</layout>
</appender>


<root>
<priority value ="debug" />
<appender-ref ref="A1"/>
</root>

</log4j:configuration>


3.  File에 로그를 계속적으로 쌓이게 하는 방법

<?xml version="1.0" encoding="euc-kr" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<!--
파일에 로그를 기록하는 샘플입니다.
기본적으로 로그파일의 이름을 기록할 수 있으며,
해당설정은 root logger에 설정되어 있는 내용을 참조하여 설정이 가능합니다.
param name="Append" value="true" 설정
-->
<log4j:configuration>

<appender name="A1" class="org.apache.log4j.FileAppender">
<param name="File" value="ienvyou.log"/>
<param name="Append" value="true"/>
<layout class="org.apache.log4j.PatternLayout">
 <param name="ConversionPattern" value="%d %-5p [%t] %-17c{2} (%13F:%L) %3x - %m%n"/>
</layout>
</appender>


<root>
<priority value ="debug" />
<appender-ref ref="A1"/>
</root>

</log4j:configuration>


4. 출력을 XML포맷의 파일로 하는 방법
<?xml version="1.0" encoding="euc-kr" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<!--
파일에 로그를 기록하는 샘플입니다.
기본적으로 로그파일의 이름을 기록할 수 있으며
해당설정은 root logger에 설정되어 있는 내용을 참조하여 설정이 가능합니다.
출력은 XML형태의 파일로 저장됩니다.
-->
<log4j:configuration>

<appender name="A1" class="org.apache.log4j.FileAppender">
<param name="File" value="ienvyou.log"/>
<param name="Append" value="false"/>
<layout class="org.apache.log4j.xml.XMLLayout"/>
</appender>


<root>
<priority value ="debug" />
<appender-ref ref="A1"/>
</root>

</log4j:configuration>


5. 파일이 일정용량(예제:100KB) 이 되면 xxx.log.1, xxx.log.2의 형태로 변경시키는 방법
<?xml version="1.0" encoding="euc-kr" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<!--
파일에 로그를 기록하는 샘플입니다.
기본적으로 로그파일의 이름을 기록할 수 있으며
해당설정은 root logger에 설정되어 있는 내용을 참조하여 설정이 가능합니다.
아래의 설정파일은 일정파일사이즈가 되면 파일변경
-->
<log4j:configuration>

<appender name="A1" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="ienvyou.log"/>
<param name="Append" value="false"/>
<param name="MaxFileSize" value="100KB"/>
<layout class="org.apache.log4j.PatternLayout">
 <param name="ConversionPattern" value="%d %-5p [%t] %-17c{2} (%13F:%L) %3x - %m%n"/>
</layout>
</appender>


<root>
<priority value ="debug" />
<appender-ref ref="A1"/>
</root>

</log4j:configuration>


6. Category 추가 방법
<?xml version="1.0" encoding="euc-kr" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<!--
log 내용중 org.apache 로 시작하는 내용도 추가로 보여줍니다.
-->
<log4j:configuration>

<appender name="A1" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="ienvyou.log"/>
<param name="Append" value="false"/>
<param name="MaxFileSize" value="100KB"/>
<layout class="org.apache.log4j.PatternLayout">
 <param name="ConversionPattern" value="%d %-5p [%t] %-17c{2} (%13F:%L) %3x - %m%n"/>
</layout>
</appender>

<category name="org.apache">
  <priority value="INFO"/>
</category>

<root>
<priority value ="debug" />
<appender-ref ref="A1"/>
</root>

</log4j:configuration>


위와 같은 형태의 xml파일을 이용하면 다양한 로그를 남길수 있으며
유용하게 사용할 수 있으리라 본다.

,