문제

에너지를 사용하고 있습니다 (http://www.enerjy.com/) 내 Java 코드의 정적 코드 분석기 도구. 다음 줄을 알려줍니다.

System.err.println ( "해당 데이터베이스 무시");

System.err를 사용하기 때문에 나쁘다. 정확한 오류는 "Java0267 System.err의 사용"입니다.

System.err를 사용하는 데 무엇이 잘못 되었습니까?

도움이 되었습니까?

해결책

짧은 답변 : 로깅 목적으로 사용하는 것은 나쁜 관행으로 간주됩니다.

광범위하게 사용할 수있는/허용되는 로깅 프레임 워크가없는 경우에 모든 사람들이 시스템을 사용하여 오류 메시지와 스택 추적을 콘솔에 인쇄하는 데 사용하는 것이 관찰입니다. 이 접근법은 개발 및 로컬 테스트 단계에서 적절할 수 있지만 중요한 오류 메시지를 잃을 수 있기 때문에 생산 환경에는 적합하지 않습니다. 이로 인해 오늘날 거의 모든 정적 분석 도구에서 이러한 종류의 코드는 검출되어 나쁜 관행 (또는 유사하게 명명 된 문제)으로 표시됩니다.

로깅 프레임 워크는 다양한 영구 위치 (로그 파일, 로그 DB 등)에 메시지를 저장할 수 있으므로 이벤트 및 오류 메시지를 기록하는 구조적이고 논리적 인 방법을 제공합니다.

가장 명백한 것 (그리고 외부 의존성이 없음) 마구 자르기 해상도는 java.util.logging.Logger 로깅 이벤트를 기본적으로 콘솔로 전달함에 따라 클래스. 예를 들어:

final Logger log = Logger.getLogger(getClass().getName());
...
log.log(Level.ERROR, "Something went wrong", theException);

(또는 해당 분석 옵션을 끄면)

다른 팁

오류의 설명자는 다음과 같습니다.

System.err의 사용은 잔류 디버그 또는 보일러 플레이트 코드를 나타낼 수 있습니다. 오류 로깅을 처리하기 위해 Apache Commons와 같은 전체 기능을 갖춘 로깅 패키지를 사용하는 것을 고려하십시오.

로깅 목적으로 System.err를 사용하고있는 것 같습니다. 몇 가지 이유로 차선책입니다.

  • 응용 프로그램 바이너리를 수정하지 않고 런타임에 로깅을 활성화하는 것은 불가능합니다.
  • 구성 파일을 편집하여 로깅 동작을 제어 할 수 없습니다.
  • 아마도 다른 많은 사람들

로깅 프레임 워크 사용에 대한 위의 요점에 동의하지만 여전히 사용하는 경향이 있습니다. System.err 한 곳에서 출력 : 종료 후크 내. 이것은 내가 그것을 사용할 때 그것을 발견했기 때문입니다 java.util.logging 프레임 워크 로그 명령문이 종료 후크에서 발생하는 경우 항상 표시되는 것은 아닙니다. 로깅 라이브러리에는 아마도 로그 파일 및 기타 리소스를 정리하기위한 자체 종료 후크가 포함되어 있기 때문에 셧다운 후크가 실행되는 순서에 의존 할 수 없으므로 의존 할 수 없습니다. java.util.logging 예상대로 작동하는 진술.

자세한 내용은이 링크 ( "주석"섹션)를 확인하십시오.

http://weblogs.java.net/blog/dwalend/archive/2004/05/shutdown_hooks_2.html

(분명히 다른 대안은 다른 로깅 프레임 워크를 사용하는 것입니다.)

System.err는 다른 무엇보다도 디버깅 목적으로 더 많습니다. 보다 사용자 친화적 인 방식으로 적절한 예외 처리 및 오류를 처리하는 것이 선호됩니다. 사용자가 오류를 확인하려면 system.out.println을 대신 사용하십시오.

개발자의 관점에서 이러한 오류를 추적하려면 Logger를 사용해야합니다.

System.err에 작성된 것은 일반적으로 런타임에 손실되므로 메시지를 출력 할 위치에 대해 더 유연한 로깅 프레임 워크를 사용하는 것이 더 나은 관행으로 간주되므로 파일로 저장하고 분석 할 수 있습니다.

System.err and System.out 비 콘솔 애플리케이션에 대한 아웃은 IDE에서 코드를 실행하는 개발자 만 볼 수 있으며 항목이 생산 중에 트리거되면 유용한 정보가 손실 될 수 있습니다.

System.err.println 및 System.out.println은 Logging-Interface로 사용해서는 안됩니다. STD 출력 및 STD-ORROR (System.out 및 .err에 의해 작성됨)는 명령 라인 툴의 메시지를위한 것입니다.

System.err는 콘솔에 인쇄합니다. 이것은 숙제를 테스트하는 학생에게 적합 할 수 있지만 이러한 메시지가 보이지 않는 응용 프로그램에는 적합하지 않습니다 (콘솔만이 많은 줄을 저장).

더 나은 접근 방식은 일반적으로 콘솔로 전송되는 메시지를 보유한 예외를 던지는 것입니다. 이에 대한 대안은이 메시지를 영원히 저장할 수있는 파일 에이 메시지를 저장하는 타사 로깅 소프트웨어를 사용하는 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top