태그 : 이클립스

이클립스에서 log4j 활용 [log4E]

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 ]

by skyforce | 2009/04/08 18:00 | [IT] 개발이야기 | 트랙백 | 덧글(0)

사람을 위한 자동화: Eclipse 플러그인으로 코드 품질 높이기[퍼옴]

 

소프트웨어를 개발할 때, 필자가 기본적으로 강조하는 부분은 결함이 코드 베이스에 들어가지 않도록 하는 것 또는 이것의 수명을 제한하는 것이다. 다시 말해서, 가능하면 빨리 결함을 찾으려고 노력한다. 더 나은 코드를 작성하는 방법을 배우고, 소프트웨어를 효과적으로 테스트 하는 방법을 배워갈수록, 결함을 더욱 잘 찾아내게 된다. 하지만, 중대한 결함을 찾을 수 있는 보안 망(safety net)도 갖고 싶기는 하다.

본 시리즈의 8월 기사에서, 감시 툴을 빌드 프로세스에 통합하면(Ant 또는 Maven을 사용함) 잠재적 결함들을 찾는데 효과적이라는 결론을 내렸다. 비록, 이러한 방식이 일관성을 유지하고 IDE를 능가하는 부분도 있지만, 약간 보수적(reactionary)이기도 하다. 여러분은 소프트웨어를 로컬에서 구현하거나, Continuous Integration 빌드가 실행되기를 기다려야 한다. 하지만, Eclipse 플러그인을 사용하면, Continuous Integration을 통해 빌드 또는 통합하기 전에 위반 사항들을 발견할 수 있다. 바로 이것을 진보적인 프로그래밍(progressive programming)이라고 할 수 있으며, 코딩 하면서 품질 체크도 실행할 수 있다.

이 글에서는 "5대" 코드 분석 영역에 대해 설명하겠다.

  • 코딩 표준
  • 코드 중복
  • 코드 커버리지
  • 의존성 분석
  • 복잡성 모니터링

이러한 분석 영역들은 다음과 같은 Eclipse 플러그인을 사용한다.

  • CheckStyle: 코딩 표준
  • PMD의 CPD: 코드 중복 발견
  • Coverlipse: 코드 커버리지 측정
  • JDepend: 의존성 분석 제공
  • Eclipse Metrics 플러그인: 복잡성 탐지

 

Eclipse 플러그인 설치하기

Eclipse 플러그인 설치는 매우 간단하며, 단지 몇 단계만 거치면 된다. 시작하기 전에, 플러그인의 다운로드 사이트의 URL을 파악하는 것이 좋다. 표 1에서 필자가 이 글에서 사용하는 플러그인 리스트를 정리했다.


표 1. 코드 향상 플러그인과 설치 URL 리스트

목적Eclipse 플러그인 URL
CheckStyle코딩 표준 분석http://eclipse-cs.sourceforge.net/update/
Coverlipse코드 커버리지 테스트http://coverlipse.sf.net/update
CPDCopy/Paste 탐지http://pmd.sourceforge.net/eclipse/
JDepend패키지 의존성 분석http://andrei.gmxhome.de/eclipse/
MetricsComplexity monitoringhttp://metrics.sourceforge.net/update

이제 여러분은 유용한 플러그인을 어디서 구하는지 알았으니, 설치는 간단하다. Eclipse를 시작하고 다음 단계들을 수행한다.

 

  1. Help | Software Updates | Find and Install을 선택한다. (그림 1)
    그림 1. Eclipse 플러그인 찾기 및 설치
    Eclipse 플러그인 찾기 및 설치 
  2. Search for new features to install 라디오 버튼을 선택하고 Next를 클릭한다.
  3. New Remote Site를 클릭하고, 원하는 플러그인의 이름과 URL을 입력한다. (그림 2) OK를 클릭한 다음 Finish를 클릭하면 Eclipse Update Manager가 디스플레이 된다.
    그림 2. 새로운 원격 사이트 구성하기
    새로운 원격 사이트 구성하기
  4. Eclipse Update Manager에서, 플러그인의 다양한 측면을 볼 수 있는 옵션이 있다. 일반적으로 위에 있는 것을 선택한다. (그림 3) 선택을 하고 Finish를 클릭한다. Eclipse는 이때 플러그인을 설치한다. Eclipse 인스턴스를 재시작 해야 한다.
    그림 3. Eclipse 플러그인 설치하기
    Eclipse 플러그인 설치하기

이 단계를 수행하면 Eclipse 플러그인이 설치된다. 플러그인의 이름과 관련 다운로드 위치를 변경하라.

 

CheckStyle로 표준 수정하기

코드 베이스에 대한 관리능력은 소프트웨어의 총 비용에 직접적인 영향을 미친다. 더욱이, 관리능력은 개발자의 욕구 불만에도 기여한다. 코드 변경이 쉬울수록, 새로운 제품 기능을 추가하기도 쉽다. CheckStyle 같은 툴은 큰 클래스, 긴 메소드, 사용되지 않는 변수 등에 대한 관리능력에 영향을 미치는 코딩 표준의 위반 사항들을 찾는데 도움이 된다.

 

Eclipse용 CheckStyle 플러그인을 사용하면 코딩 하면서 소스 코드 내에서 다양한 위반 사항에 대해 알 수 있고, 개발자들이 체크인 전에 위반 사항을 고치게 된다. CheckStyle 플러그인을 지속적인 코드 리뷰에 사용하는 것으로 생각하면 된다.

CheckStyle 플러그인을 설치하고, 다음과 같이 구성한다. (그림 4)

  1. Eclipse 메뉴에서 Project를 선택한 다음 Properties 아이템을 선택한다.

  2. CheckStyle active for this project 체크 박스를 선택하고 OK를 클릭한다.



    그림 4. Eclipse에서 CheckStyle 플러그인 구성하기
    Eclipse에서 CheckStyle 플러그인 구성하기

Eclipse는 워크스페이스를 재구현 하고 Eclipse 콘솔 안에 코딩 위반 사항들을 발견해 낸다. (그림 5)


그림 5. Eclipse내에 나타난 CheckStyle 위반 사항 리스트
Eclipse내에 나타난 CheckStyle 위반 사항 리스트

CheckStyle 플러그인을 사용하여 Eclipse 내에 코딩 표준 검사를 포함시키면, 코딩 하는 동안 코드를 향상시킬 수 있고, 개발 사이클에서 조기에 소스 코드의 잠재적 결함을 발견할 수 있다. 여러분의 시간, 좌절감, 나아가서 프로젝트 비용까지 줄일 수 있다는 이점도 있다.

 

 

Coverlipse로 커버리지 확인하기

Coverlipse는 상응하는 테스트를 갖고 있는 소스 코드의 비율을 평가하는데 사용할 수 있는 Eclipse 플러그인이다. Coverlipse를 사용하여 코드를 작성하는 동안 코드 커버리지를 평가할 수 있다. 벌써 패턴을 인식하고 있나?

Coverlipse 플러그인을 설치하고 Run Eclipse 메뉴 아이템을 선택하여 JUnit과 연결시킨다. 이렇게 하면 JUnit, SWT 애플리케이션, 자바™ 애플리케이션 같은 실행 구성들이 나타난다. 오른쪽 클릭하여 JUnit w/Coverlipse 노드에서 New를 선택한다. 여기서부터, JUnit 테스트의 위치를 규명해야 한다. (그림 6)


그림 6. Coverlipse를 구성하여 코드 커버리지 확보하기
Coverlipse를 구성하여 코드 커버리지 확보하기

Run을 클릭하면, Eclipse는 Coverlipse를 실행하고 소스 코드에 마커를 삽입한다. (그림 7) 이것은 JUnit 테스트로 연결되었던 코드의 부분들을 나타낸다.


그림 7. Coverlipse에 의해서 생성된 리포트와 삽입된 클래스 마커
Coverlipse에 의해서 생성된 리포트와 삽입된 클래스 마커

보다시피, Coverlipse Eclipse 플러그인을 사용하여 훨씬 더 빠르게 코드 커버리지를 결정할 수 있다. 이 기능은 코드를 CM 시스템에 체크인 하기 전에 테스팅 하는데 도움이 된다. 이 얼마나 진보적인 프로그래밍인가?

 

CPD로 코드 중복 발견하기

PMD 플러그인은 CPD(Copy Paste Detector)라고 하는 기능을 제공하는데, 이것은 중복된 코드를 찾아낸다. Eclipse에서 이 툴을 사용하려면, CPD 유틸리티가 포함된 PMD용 Eclipse 플러그인을 설치해야 한다.

중복 코드를 찾아내려면, Eclipse 프로젝트를 오른쪽 클릭하고, PMD | Find Suspect Cut and Paste를 선택한다. (그림 8)


그림 8. CPD 플러그인을 사용하여 Copy and Paste 체크 실행하기
CPD 플러그인을 사용하여 Copy and Paste 체크 실행하기

CPD를 실행했다면, report 폴더가 Eclipse 루트 디렉토리에 생성되고, 여기에는 cpd.txt라는 파일이 포함된다. 이곳에 모든 중복 코드들이 나열된다. cpd.txt 파일 예제는 그림 9를 참조하라.


그림 9. Eclipse 플러그인에서 생성된 CPD 텍스트 파일
Eclipse 플러그인에서 생성된 CPD 텍스트 파일

중복 코드를 직접 찾기란 어려운 일이지만, CPD 같은 툴을 사용하면 코딩 하는 동안 중복 코드를 빠르게 찾아낼 수 있다.

 

 

JDepend를 이용한 의존성 검사

JDepend는 무료로 사용할 수 있는 오픈 소스 툴로서, 패키지 의존성에 대한 객체 지향식의 측정법을 제공한다. 코드 베이스의 복원력에 대한 지표라고 할 수 있다. 다시 말해서, JDepend는 아키텍처의 정합성을 측정하는데 사용된다.

Eclipse 플러그인 외에도, JDepend는 Ant 태스크, Maven 플러그인, 자바 애플리케이션을 사용하여 측정 결과를 얻는다. 각각은 같은 정보를 다르게 전달한다. 하지만, Eclipse 플러그인이 가진 중요한 차이점 및 효과라고 한다면 정보를 (여러분이 코딩한 대로) 소스 코드에 매우 근접하게 제공한다는 점이다.

그림 10은 소스 폴더를 오른쪽 클릭하고, Run JDepend Analysis를 선택하여 JDepend용 Eclipse 플러그인을 사용하는 방법을 보여준다. 소스 코드를 갖고 있는 폴더를 선택하라. 그렇게 하지 않으면, 메뉴 옵션을 볼 수 없다.


그림 10. JDepend Analysis를 사용하여 코드 분석하기
JDepend Analysis를 사용하여 코드 분석하기

JDepend 분석을 실행할 때 생성되는 리포트는 그림 11에 나와있다. 왼쪽 패인은 패키지를 나타내고, 오른쪽 패인은 각 패키지의 의존성을 나타낸다.


그림 11. Eclipse 내 프로젝트의 패키지 의존성
Eclipse 내 프로젝트의 패키지 의존성

JDepend 플러그인은 이 아키텍처가 시간이 흘러도 유지될 수 있는지의 여부를 볼 수 있는 많은 정보를 제공하고 있다. 가장 중요한 것은 코딩 하는 동안 데이터를 볼 수 있다는 점이다.

 

Metrics로 복잡성 평가하기

"5대" 코드 분석 영역의 마지막 영역은 복잡성이다. Eclipse는 Metrics라고 하는 플러그인을 제공한다. 이것은 복잡성을 포함하여 유용한 코드 메트릭스를 제공하는데, 이것은 메소드의 고유 경로의 수를 측정한 것이다.

Metrics 플러그인을 설치하고 Eclipse를 재시작 한다. 다음 단계들을 수행한다.

  1. 프로젝트를 오른쪽 클릭하고, Properties 메뉴를 선택한다. 결과 윈도우에서, Enable Metrics plugin 체크 박스를 선택하고 OK를 클릭한다. (그림 12)



    그림 12. Metrics 구성하기
    Metrics 구성하기



  2. Eclipse에서 Window 메뉴를 선택하여 Metrics 뷰를 열고 Show View | Other...를 선택한다.

  3. Metrics | Metrics View를 선택하여 윈도우를 연다. (그림 13) 자바 퍼스펙티브를 사용하고 프로젝트를 재구현 하여 메트릭스를 디스플레이 한다.



    그림 13. Eclipse에서 Metrics View 열기
    Eclipse에서 Metrics View 열기



  4. OK를 클릭하면 그림 14에 나온 것 같은 윈도우가 디스플레이 된다.

    이 경우, 나는 개별 메소드의 복잡성을 보고 있다. 정말로 좋은 점은 Metrics 리스트에서 메소드를 더블 클릭할 수 있고, 플러그인이 Eclipse 에디터에서 그 메소드용 소스 코드를 연다는 점이다. 정정하기가 아주 쉬워졌다.



    그림 14. 메소드용 Cyclomatic Complexity 보기
    메소드용 Cyclomatic Complexity 보기

앞서 언급했지만, Eclipse Metrics는 소프트웨어를 개발하는 동안 코드를 향상시킬 수 있는 강력한 메트릭스를 제공한다.

 

 

by skyforce | 2008/10/20 15:46 | [IT] 개발이야기 | 트랙백(1) | 덧글(0)

◀ 이전 페이지 다음 페이지 ▶