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