2013-11-05 2 views
0

복잡한 애플리케이션을 작성 했으므로 이제 일부 테스터의 도움을 받아 디버깅해야합니다. 지금 직면하고있는 문제는 소프트웨어 사용 중에 어떤 종류의 예외가 발생했는지 알 수 없다는 것입니다. 사용자가 응용 프로그램이나 애플릿을 사용하는 동안 콘솔 스트림을 얻고 다른 창에 메시지를 표시하는 빠른 방법이 있습니까?Java 콘솔 메시지 리디렉션

+2

당신이 로깅 프레임 워크를 사용하고 있습니까? –

+1

이 복잡한 응용 프로그램은'System.out.println'이 아니라 실제 로깅 프레임 워크를 사용한다고 말하십시오 ... –

+0

명령 줄을 사용하여 실행 중이십니까? 또는 그것은 .jar/.exe입니까? – Levenal

답변

1

:

FileOutputStream fos = new FileOutputStream("log.txt"); 
    PrintStream out = new PrintStream(fos); 
    System.setOut(out); 
    System.setErr(out); 

    System.out.println("Logged to file"); 
1

slf4j과 같은 로깅 프레임 워크를 logback과 함께 사용하십시오. 로그 메시지를 여러 위치에 저장하는 도우미가 수십 가지 "appenders"를 제공합니다.

당신의 경우에는 마지막 100 개의 메시지를 스레드 안전 목록에 수집하는 새로운 appender를 작성하는 것이 좋습니다.

루트 로거에 첨부하십시오 (문서 참조).

오류 또는 예외가 기록되는 경우 목록에서 모든 메시지를 가져 와서 문자열로 변환하십시오. 이 경우 logback을 사용하는 경우 create an encoder입니다.

문자열을 결합하여 텍스트 편집기 위젯에 표시하면 고객이 쉽게 메시지를 이메일에 붙여 넣을 수 있습니다. &

또는 기존 메일 첨부기를 사용해 볼 수도 있습니다. 오류에만 응답하고 직접 오류를 보내도록 구성하십시오. 그러나 메일 공급자가이를 처리 할 수 ​​있는지 확인하는 것이 좋습니다. 소프트웨어의 버그로 인해 밤에 70,000 개 이상의 메일이 전송되는 경우가있었습니다. 그 후에 Outlook은 많은 메일을 처리 할 수 ​​없다는 것을 알게되었습니다. 당신은 응용 프로그램 시작에 (또는 다른 스트림) 파일에 모든 콘솔 메시지를 리디렉션 한 다음 GET 예외에 대한 파일 내용을 볼 수

+2

나는 소켓 appender에 갔을 것이다 - 로그 호스트에 로그를 보낸다. 즉, 클라이언트에서 발생하는 로깅을 가져옵니다. –