2009-03-16 9 views
8

알고 싶습니다. java stderr는 어디에서 표준 적으로 사용됩니까?java stderr는 어디에 있습니까?

"표준"오류 출력 스트림을 재 할당하는 System.setErr을 사용하여 stderr을 변경할 수 있음을 알고 있지만, 어느 것이 "표준"인지 알 수 없습니다.

내 질문에 더 자세히 지정하고 싶습니다. java (jni)에서 사용하는 C++ 라이브러리가 있습니다. 문제는 그것이 내 C++ 라이브러리에서 오는 stderr에 대한 출력을 볼 수 없다는 것입니다. C++ 라이브러리에서 assert()를 호출하고 라이브러리를 사용하는 Java API를 실행할 때 콘솔에서 출력을 보지 못합니다.

+0

당신이 System.stderr.writeln을 시도해 봤어 java.io.FileDescriptor.err 로 이동한다 ("나는 여기있다")? 당신은 무엇을 보았는가? –

답변

3

기본적으로 System.err은 System.out과 마찬가지로 콘솔입니다.

-1

표준 오류 출력 스트림이 콘솔로 이동합니다. 이 스트림은 이미 열려있어 출력 데이터를 받아 들일 준비가되었습니다.

자세한 내용은 java sun api을 참조하십시오.

+1

이 링크는 질문에 대답 할 수 있지만 답변의 핵심 부분을 여기에 포함시키고 참조 용 링크를 제공하는 것이 좋습니다. 링크 된 페이지가 변경되면 링크 전용 답변이 유효하지 않게 될 수 있습니다. – Linuxios

+0

예, 당신 말이 맞아요, 내가 바꿀거야! – Tobias

14

프로세스의 표준 오류 스트림으로 설정됩니다.

  • 콘솔에서 응용 프로그램을 실행하면 콘솔에도 기록됩니다.
  • GUI에서는 표준 출력/오류가 자주 제거됩니다. 즉, 출력이 손실됩니다.
  • 서비스 (예 : 웹 서버)에서 표준 오류/출력은 일반적으로 회전 된 로그 파일에 캡쳐되지만 어쨌든 서비스에 따라 다릅니다.

대부분의 플랫폼에서는 표준 오류 스트림을 다른 곳 (예 : 텍스트 파일)으로 리디렉션 할 수 있습니다.

System.setErr의 아이디어는 프로세스 자체의 표준 오류 스트림을 사용 하지 당신을 허용하지만, 지정된 스트림에 가서 너무 System.err.println 등을 호출하는 변경하는 것입니다.

0

방금 ​​System.err.println을 수행하는 작은 테스트 프로그램을 작성했으며 콘솔에 출력 된 것으로 보입니다.

2

발신자의 파일 설명자 2입니다. 거기에서 어디로 가는가 — 발신자에 따라 다릅니다. 콘솔에서 , 당신은 예를 들어 같은, 다른 곳을 리디렉션 할 수 있습니다 :

java Example 2>> errors.log 
관련 문제