2009-03-09 2 views
17

JVM을 완전히 정지시킨 응용 프로그램에서 버그를 발견했습니다. 생성 된 stacktrace는 개발자에게 중요한 정보를 제공 할 것이며 Java 콘솔에서 가져 오는 것이 좋습니다. JVM이 충돌하면 콘솔이 멈추고 포함 된 텍스트를 더 이상 복사 할 수 없습니다.Java 콘솔 출력을 파일로 파이프하는 방법은 무엇입니까?

Java 콘솔을 파일 또는 Java 응용 프로그램의 콘솔 출력에 액세스하는 다른 수단에 직접 파이프하는 방법이 있습니까?

업데이트 : 코드를 변경하지 않고 언급하는 것을 잊었습니다. 나는 수동 시험기이다.

업데이트 2 : 이것은 Windows XP에서 제공되며 실제로 웹 시작 응용 프로그램입니다.

javaws jnlp-url
의 출력 파이프가 작동하지 않습니다 (빈 파일).

+0

자바 콘솔 웹 스타트 애플리케이션 또는 애플릿을 실행할 때 열리는 창을 의미합니까? – Mark

+0

정확히. Java 환경 설정의 옵션입니다. –

답변

22

실제로 Java 제어판에서 tracing을 활성화 할 수 있습니다. 이것은 Java 콘솔에서 끝나는 모든 것을 추적 파일로 파이프합니다.

로그 파일에 종료됩니다 : 유닉스/리눅스에

  • < user.home의 > /.java/deployment/log을
  • < 사용자 응용 프로그램 데이터 폴더 > 일 \ 자바 \ \ 배포 \ 윈도우
  • /~/라이브러리/캐시/자바 로그온/
+0

그냥 좋은 솔루션을 발견, 지원 주셔서 감사합니다! –

+0

+1. 나는이 대답을 추가하려하고 있었다. – Mark

+0

왜 콘솔이 얼 었는지 말해 줄 수 있습니까? –

12

다른 값으로 System.out 필드를 설정할 수 있습니다 (코드를 수정할 수있는 경우) :

System.setOut(new PrintStream(new FileOutputStream(fileName))); 

당신이 Unix에서 스크립트 (java를 통해 프로그램을 호출)를 실행하는 경우 당신이 할 수 있습니다 :

/path/to/script.sh >& path/to/output.log 
+0

죄송합니다. 언급을 잊어 버렸습니다. 코드를 건드리지 않고 말입니다. Mea culpa! –

+2

흠. 'System.out'은'final'이므로'PrintStream'을 사용하는 것처럼 변경할 수는 없습니다. 'System.setOut (new PrintStream (new FileOutputStream (fileName))); ' –

+0

해당 파일에서 예외 스택 추적을 리디렉션하는 방법도'System.setOut (...) '을 사용하면됩니다. ? –

2

고정 된 콘솔은 아마도 교착 상태를 의미합니다 (반복되는 예외 발생을 의미 할 수도 있음). jstack을 사용하여 스택 덤프를 가져올 수 있습니다. jps은 프로세스를 더 쉽게 찾을 수 있습니다.

7

가 맥에서 10.8.2 로그가 /Users/<userName>/Library/Application Support/Oracle/Java/Deployment/log/에서 볼 수 있습니다 OS X에 로그인합니다.

Java 제어판에서 로깅을 활성화해야하기 전에. 옵션 "Enable logging"은 "Advanced"탭에 있습니다. Java 제어판은 "System preferences"에서 시작할 수 있습니다.

0

시도해보십시오. this guide 저에게 적합합니다. 또한 "System.setOut (fileStream);", "System.setErr (fileStream);"을 어떻게 설정할 수 있는지 안내합니다.