2010-08-08 2 views
0

을 수신 할 수있는 방법이 있습니까 외부 JAR 파일에서 STDERR 스트림을 사용하고 있습니까?외부 JAR에서 보낸 stderr 캐치 및 수정

내 상황은 내 자신의 XYZ 용 STDERR 프로그램과 ABC 용 STDERR을 사용하는 외부 JAR 프로그램입니다. 두 가지를 병합하여 최종 사용자를 위해 올바르게 형식화되었지만 을 잡는 방법을 알아낼 수 없습니다. 또는 을 리디렉션하거나 JAR의 STDERR을 (올바른 용어는 무엇입니까?) 찾으십니까? 자바 프로그램에서

답변

2

표준 오류 스트림이 System.err 및 표준 출력 스트림입니다

덕분에, System.out입니다.

PrintStream 개체에 대해 System.setErr(java.io.PrintStream) 및 System.setOut을 사용하여이 두 가지를 모두 재정의 할 수 있습니다. 그러나 이것은 세계적으로 대체 될 것입니다. 포맷을 행해, 이것을 PrintStream의 표준 에러 스트림으로서 설정하는 PrintStream의 구현을 제공합니다.

두 개의 서로 다른 프로세스가있는 경우 다른 processes's error 스트림을 입력 스트림으로 가져 와서 (fromat에서) 내용을 읽고 표준 오류 스트림에 쓸 수 있습니다.

+0

여기서 문제는 각 JAR이 언제/무엇을 인쇄하고 있는지 알 수 없다는 것입니다. 예 : 내가 실제로 포맷 할 수 있도록 그들이오고있는 JAR을 알아야합니다. 어떤 JAR에서 오는 것을 탐지 할 방법이 없습니까? – sholsapp

0

쉬운 솔루션은 아니지만 선택한 클래스의 바이트 코드를 수정하고 정적 필드 System.err에 대한 모든 참조를 바꾼 클래스 로더, Java 에이전트 또는 전 처리기를 만들어 사용자 정의 출력 스트림에 액세스 할 수 있습니다.

+0

광고는 적합하지만 올바른 방법은 아닙니다. – TheLQ