[java] java.util.logging을 사용한 좋은 예

프로그램에서 로그를 사용하고 싶습니다. java.util.logging 에 대해 들었지만 시작 방법을 모르겠습니다.

로깅으로 수행 할 수있는 작업에 대한 예가 있습니까? 내 프로그램에서 로깅을 어떻게 사용합니까?



답변

java.util.logging 응용 프로그램과 함께 하나 이상의 jar 파일을 토트하지 않아도되며 훌륭한 Formatter와 잘 작동합니다.

일반적으로 모든 수업의 최상위에는 다음이 있어야합니다.

private static final Logger LOGGER = Logger.getLogger( ClassName.class.getName() );

그런 다음 Logger 클래스 의 다양한 기능을 사용할 수 있습니다 .


최상위 수준의 실행 흐름에서 디버깅Level.FINE 하는 모든 항목에 사용하십시오 .

LOGGER.log( Level.FINE, "processing {0} entries in loop", list.size() );

사용 Level.FINER/Level.FINEST 루프와 항상 기본 흐름 문제를 디버깅 할 때 그 많은 세부 사항을 볼 필요가 있습니다 장소에서 내부 :

LOGGER.log( Level.FINER, "processing[{0}]: {1}", new Object[]{ i, list.get(i) } );

로깅 기능의 매개 변수화 된 버전을 사용하여 GC가 따라야하는 수많은 문자열 연결 가비지가 생성되지 않도록하십시오. Object[]위와 같이 스택 할당에서 일반적으로 저렴합니다.


예외 처리에서는 항상 전체 예외 세부 사항을 기록하십시오.

try {
    ...something that can throw an ignorable exception
} catch( Exception ex ) {
    LOGGER.log( Level.SEVERE, ex.toString(), ex );
}

로그 파일에서 ex.toString()grep -n“for ” Exception“를 입력하면 메시지도 볼 수 있기 때문에 항상 여기에 메시지로 전달 합니다 . 그렇지 않으면 스택 덤프에 의해 생성 된 다음 출력 라인에있게되며 해당 라인과 일치하는 고급 RegEx가 있어야하므로 종종보다 많은 출력을 얻을 수 있습니다.


답변

다음과 같이 로거를 선언해야합니다.

private final static Logger LOGGER = Logger.getLogger(MyClass.class.getName());

따라서 클래스 이름을 리 팩터하면 다음과 같습니다.

여기예제 와 함께 Java 로거에 대한 기사를 썼습니다 .


답변

로깅에 대한 많은 예와 다른 유형이 있습니다. java.util.logging을 살펴보십시오. 패키지를 .

예제 코드 :

import java.util.logging.Logger;

public class Main {

  private static Logger LOGGER = Logger.getLogger("InfoLogging");

  public static void main(String[] args) {
    LOGGER.info("Logging an INFO-level message");
  }
}

클래스 이름을 하드 코딩하지 않고 :

import java.util.logging.Logger;

public class Main {
  private static final Logger LOGGER = Logger.getLogger(
    Thread.currentThread().getStackTrace()[0].getClassName() );

  public static void main(String[] args) {
    LOGGER.info("Logging an INFO-level message");
  }
}


답변

SLF4J는 Apache Commons Logging (ACL)보다 나은 로깅 외관입니다. 여기에는 ACL, Log4J 또는 Java Util Logging에 대한 직접 호출이 다른 로깅 프레임 워크에 대한 브릿지가 있으므로 SLF4J를 통과하므로 원하는 경우 하나의 로그 구성 파일로 모든 출력을 하나의 로그 파일로 보낼 수 있습니다. 애플리케이션이 여러 로깅 프레임 워크를 사용하는 이유는 무엇입니까? 사용하는 타사 라이브러리, 특히 오래된 라이브러리가 사용하기 때문일 수 있습니다.

SLF4J는 다양한 로깅 구현을 지원합니다. 모든 것을 표준 출력으로 출력하고 Log4J 또는 Logback (Log4J보다 권장)을 사용할 수 있습니다.

http://www.slf4j.org/

http://logback.qos.ch/


답변

개인적으로 minlog를 사용 합니다. 로깅 클래스는 수백 줄의 코드이므로 매우 간단합니다.


답변

Apache의 commons logging 유틸리티를 사용하는 것이 좋습니다. 확장 성이 뛰어나고 다른 로거에 대해 별도의 로그 파일을 지원합니다. 여기를 참조하십시오 .


답변