본문 바로가기

PMD

[한글화 시리즈-13] Java Logging Rules

Java Logging Rules

이 룰셋은 logger 사용에 관한 룰들을 포함한다.



MoreThanOneLogger

각 클래스마다 logger는 일반적으로 하나만 사용된다.

class Foo{
  Logger log = Logger.getLogger(Foo.class.getName());
  // 이렇게 2개의 logger를 사용하는 경우는 매우 드믄 경우이다.
  // 계층에 따라서 로그 정보가 다중화 될 수 있다.
  Logger log2= Logger.getLogger(Foo.class.getName());
}

LoggerIsNotStaticFinal

대부분의 경우, logger는 static final로 정의될 수 있다.

class Foo{
  Logger log = Logger.getLogger(Foo.class.getName());
  // 아래와 같이 logger를 정의하는 것이 더욱 나은 방법이다.
  static final Logger log = Logger.getLogger(Foo.class.getName());
}

SystemPrintln

System.(out|err).print를 사용하지말고 logger를 사용하자. sysout을 현재 상황을 화면에 출력하는 기능 이상을 수행할 수 없다. 하지만 logger는 화면 출력 이외에도, 파일로 로그 정보를 기록 하는 등 디버깅을 위한 많은 기능과 정보를 제공한다. 그러므로 디버깅을 위해서는 logger를 사용하는 것이 더 나은 방법이다.

class Foo{
  Logger log = Logger.getLogger(Foo.class.getName());
  public void testA () {
    System.out.println("Entering test");
    // logger를 사용하자!
    log.fine("Entering test");
  }
}

AvoidPrintStackTrace

printStackTrace() 메소드를 사용하는 방식은 굉장히 무책임한 오류 처리이다. 이런 경우 차후 모든 오류는 화면에 오류 정보를 표시하는 것 이외의 모든 처리가 무시되며, 디버깅이 매우 어렵다. 제발 로그를 출력해서 디버깅이 가능하게 하자.

class Foo {
  void bar() {
    try {
      // do something
    } catch (Exception e) {
      //이런 방식은 무책임한 방식이다. 제발 피하자.
      e.printStackTrace();
    }
  }
}

해당 URL: http://pmd.sourceforge.net/pmd-4.2.6/rules/logging-java.html