2015-02-06 2 views
1

소스가없는 jar 파일이 있습니다 (상대적으로 오래된 것입니다). 나는 그것이 실행될 때 서버 (들어오고 나가는 연결) 역할을하며 많은 양의 콘솔 출력을 내보내는 것을 안다. 내가하고 싶은 일은 다른 자바 애플리케이션이 exec를 사용하여 실행시키고, 스트림 내에서 스트림을 리다이렉트하여 항아리의 출력 내에서 특정 키워드 나 타임 스탬프를 볼 수있게하는 것이다. 프로그램의 목적은 특정 사건을 추적하고 사건 발생시기에 대한 더 큰 그림을 제공하고 미래에 일어날 때 어떻게 반응 하는지를 "배우는"것입니다.Java를 사용하여 콘솔 출력 스트림을 실시간으로 리디렉션

필자가 해왔 던 책에서 추측하겠습니다. 까다로운 부분은 스트림이 닫힌 후에가 아니라 실시간으로 데이터를 얻는 것입니다.

어떻게해야합니까?

+0

단순히 추가 클래스를 제공하고 기존 JVM에서 jar를 직접 호출하는 대신 exec를 실행하려는 이유는 무엇입니까? 표준을 쉽게 리디렉션 할 수 있습니다. 또한 이것이 로깅 출력 인 경우 로깅 프레임 워크를 재구성하는 것이 매우 간단 할 수 있습니다. –

+0

@ Thorbjørn Ravn Andersen 나는 이것이 가능하다는 것을 몰랐다. 이 작업을 수행하는 방법에 대한 정보는 무엇입니까? –

+0

항아리를 클래스 패스에 놓습니다. 오래된 main() 메소드가 어디에 있는지 알아보십시오. 필요한 main()을 작성하고 이전 main()을 호출합니다. http://stackoverflow.com/questions/2851234/system-out-to-a-file-in-java도 참조하십시오. –

답변

1

zip 프로그램으로 항아리를 추출하십시오. 매니페스트

의 주요 클래스를 봐 새로운 클래스

public class MyLogger { 
    public static void main (String args[]) throws Exception { 
     System.setOut(new PrintStream("out.txt")); 
     System.setErr(new PrintStream("err.txt")); 
     OriginalClassName.main(args); 
    } 
} 
만들기

이제 단순히 클래스 (당신의 코드를하지 않아도 원래의 .jar가 될하기 위해 야완 클래스 경로를 설정)을 구축 jar 도구를 사용하여 새로운 .jar 파일을 만들고 매니페스트의 주요 클래스로 클래스를 설정하십시오.

이제 실행할 때 (예 : -f 매개 변수와 함께) 꼬리와 같은 도구를 사용하여 파일이 실시간으로 기록되는 동안 콘솔의 파일 내용. Tail은 Linux 및 다른 Unix 플랫폼에서 사용할 수 있습니다. 예 : Windows 설치 cygwin.

관련 문제