언어2007. 4. 11. 09:23

다운로드 : http://myhome.gimhae.go.kr/cugain/cugain_pds/cugain_board_javadata/de.jayefem.log4e_free_1.0.4.zip

 

1. Log4J 간단한 사용법

http://logging.apache.org/ 가셔서 Log4J 파일을 다운받으세요.

압축을 풀면 몇몇 폴더들이 보이는데 그중 dist 라는 폴더에서 들어가보시면 log4j-???.jar 파일이 있는데 그파일을 해당 프로젝트에 추가해 넣으시면 되겠네요.

(jre/lib/ext
넣고 쓰셔도 되긴 하지만, appender 관련 경고메세지가 뜬다고 하니 유저라이브러리처럼 필요할때마다 삽입하는것도 괜찮을듯)

그런뒤에 이제는 Eclipse 플러그인 Log4E 이용하여 Log4J 사용해 볼께요.

(
플러그인은 Eclipse 업데이트 메뉴를 이용하여 http://log4e.jayefem.de/update 다운받으세요. Pro버전은 45일간 무료, Pro버전이 아닌것을 사용해도 무방)

먼저 단순하게 Hello World 찍어내는 클래스를 만들어보죠.

========================================================

public class Hello
{
      public static void main(String argv[])
      {

           System.out.println("Hello world.");
           System.out.println("What a beatiful day.");
      }
}

========================================================

이제 소스에서 Log4J 이용해보도록 하죠. 우선 마우스를 아무곳에 가져다대고 오른쪽버튼 클릭

그곳에서 Log4E->Declare Logger 선택하면

========================================================

import org.apache.log4j.Logger;

public class Hello
{

      private static final Logger logger = Logger.getLogger(Hello.class);

      public static void main(String argv[]) {
           System.out.println("Hello world.");
           System.out.println("What a beatiful day.");
      }
}

========================================================

이렇게 logger 생성 됩니다. 다시 여기서 마우스 오른쪽 클릭후 Log4E->Inserts Log Statements for This Class 선택하게 되면 클래스의 처음과 마지막에 로깅문이 추가됩니다.

========================================================

import org.apache.log4j.Logger;

public class Hello
{

      private static final Logger logger = Logger.getLogger(Hello.class);


      public static void main(String argv[])
      {

           if (logger.isDebugEnabled())
           {
               logger.debug("main(String) - start");
           }

           System.out.println("Hello world.");
           System.out.println("What a beatiful day.");

           if (logger.isDebugEnabled())
           {
               logger.debug("main(String) - end");
           }

      }
}

========================================================

선택에 따라서 메소드에만 혹은 커서가 위치한 곳에만 로깅문 삽입이 가능하네요.

(debug
문이 if(logger.isDebugEnabled()) 안쪽에 위치하지 않기를 원한다면 Log4E 옵션의 Profile->Statements 부분의 Embed isDebugEnabled() statements 부분의 체크를 해제바람)

이제 System.out 문을 이용하여 디버그하였던 구문들을 전부 로깅문으로 바꿔보죠.

마우스 오른쪽 버튼을 눌러서 Log4E->Replace System.out's For This Class 선택해보세요.

========================================================

import org.apache.log4j.Logger;



public class Hello
{

      private static final Logger logger = Logger.getLogger(Hello.class);


      public static void main(String argv[])
      {

           if (logger.isDebugEnabled())
           {
               logger.debug("main(String) - start");
           }

           logger.debug("Hello world.");
           logger.debug("What a beatiful day.");

           if (logger.isDebugEnabled())
           {
               logger.debug("main(String) - end");
           }
      }
}

========================================================

System.out.println
구문이 logger.debug 바뀐것을 보실수 있네요.

(if
문이 제거된 것은 위에 쓴것처럼 옵션을 조정하였음)

상태에서 컴파일한뒤 실행해보면 콘솔창에는

==========================================================

2005-09-01 15:28:55,418 [main] DEBUG Hello - main(String) - start
2005-09-01 15:28:55,428 [main] DEBUG Hello - main(String) - Hello world.
2005-09-01 15:28:55,428 [main] DEBUG Hello - main(String) - What a beatiful day.
2005-09-01 15:28:55,428 [main] DEBUG Hello - main(String) - end

==========================================================

같이 뜨게 됩니다.


이제 로그내용을 파일로 저장 해보도록 하죠.

아래의 내용을 log4j.properties라는 이름으로 Hello.java 들어있는 폴더안에 같이 넣습니다.

(Eclipse Property Editor 이용하여 작성하세요.)

===========================================================

######## log4j.properties ########



####################################
# Categories & Levels
####################################
log4j.rootCategory=DEBUG, FileApp, ConApp



####################################
# Appender
####################################

# ConApp is set to be a ConsoleAppender
log4j.appender.ConApp=org.apache.log4j.ConsoleAppender
# ConApp use PatterLayout.
log4j.appender.ConApp.layout=org.apache.log4j.PatternLayout
# Define Pattern
log4j.appender.ConApp.layout.ConversionPattern=%d [%t] %-5p %c - %m%n


# FileApp is to create log-file using RollingFileAppender
log4j.appender.FileApp=org.apache.log4j.RollingFileAppender
log4j.appender.FileApp.File=./MyLog.log
log4j.appender.FileApp.MaxFileSize=500KB

# Keep One Backup File
log4j.appender.FileApp.MaxBackupIndex=1
log4j.appender.FileApp.layout=org.apache.log4j.PatternLayout
log4j.appender.FileApp.layout.ConversionPattern=%d [%t] %-5p %c - %m%n

===========================================================

이상과 같이 기록후 저장한뒤에 다시 실행해 보세요.

그러면 해당 프로젝트가 위치하는 폴더의 루트에 MyLog.log라는 파일이 생성되어있을거예요.

만약 로그메세지중에

===============================================================

log4j:WARN No appenders could be found for logger (
해당클래스이름).
log4j:WARN Please initialize the log4j system properly.

===============================================================

이런것이 나온다면, 나름대로 분석해본 결과 2가지의 경우더군요.

  1.
클래스가 디폴트패키지가 아닌 유저가 지정한 패키지안에 있을경우.

  2.
디폴트 패키지인데도 발생하는 경우.

1
번의 경우 단순히 log4j.properties파일을 디폴트패키지안에 넣으면 되더군요.

2
번의 경우에는 약간 귀찮지만 클래스 파일의 내용에 아래의 구문을 추가합니다.

========================================================

import org.apache.log4j.Logger;

import org.apache.log4j.PropertyConfigurator;


public class Hello
{

      private static final Logger logger = Logger.getLogger(Hello.class);


      public static void main(String argv[])
      {

           PropertyConfigurator.configure("
해당log4j.properties 위치한 절대경로명지정");

           // ex}   PropertyConfigurator.configure("C:\\Test\\log4j.properties");



           if (logger.isDebugEnabled())
           {
               logger.debug("main(String) - start");
           }

           logger.debug("Hello world.");
           logger.debug("What a beatiful day.");

           if (logger.isDebugEnabled())
           {
               logger.debug("main(String) - end");
           }
      }
}

========================================================

위와 같이 한다면 아마 대부분은 문제 해결될 거라고 보네요.



(참조 웹페이지&블로그)

1.
http://blog.empas.com/jutanme/4967864

2. http://tong.nate.com/minijava/886534

3. http://log4e.jayefem.de/index.php/Log4E:FAQ (log4j.properties
파일작성시 참조)

[
출처 :: http://blog.naver.com/cds2363.do?Redirect=Log&logNo=100016800156 ]

Posted by 동동(이재동)