2013-11-05 83 views
0

我編寫了一個複雜的應用程序,現在我必須在一些測試人員的幫助下進行調試。我現在面臨的問題是,他們無法知道在使用該軟件期間發生了什麼樣的異常。當用戶使用應用程序或Applet時,是否有一種快速獲取控制檯流並在另一個窗口中顯示消息的方法?重定向Java控制檯消息

+2

您使用的日誌框架? –

+1

這個複雜的應用程序,請說你正在使用一個真正的日誌框架,而不是'System.out.println' ... –

+0

你使用命令行來運行它嗎?或者它是一個.jar/.exe? – Levenal

回答

1

您可將所有控制檯消息在應用程序啓動文件(或其他流),然後看文件內容爲GET例外:

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。它提供了幾十個不同的「appender」 - 幫助者將日誌消息保存在不同的地方。

對於您的使用案例,我建議編寫一個新的appender,收集線程安全列表中的最後100條消息。

將它附加到根記錄器(請參閱文檔)。

當記錄錯誤或異常時,從列表中取出所有消息並將它們轉換爲字符串。當使用logback時,create an encoder爲此。

加入字符串並將它們顯示在文本編輯器小部件中,以便客戶端可以輕鬆切割&將郵件粘貼到電子郵件中。

另外,您可以嘗試現有的郵件appender。將其配置爲僅對錯誤做出響應,並讓錯誤直接發送給您。但我建議確保您的郵件提供商能夠處理這個問題 - 我們曾經發生過一個軟件錯誤導致超過70,000封郵件過夜發送的情況。之後,我們瞭解到Outlook無法處理那麼多郵件。

+2

我會去換套接字appender - 將日誌發送到日誌主機。這意味着您可以在客戶端進行日誌記錄。 –