我正在創建jsch會話來遠程運行命令,而且我正面臨一種奇怪的行爲。 在我的一個線程中創建會話,將輸出流設置爲System.err並使用會話。jsch會話是否擁有錯誤流,當它被設置時,沒有其他線程可以使用它?
ChannelExec channel = (ChannelExec) session.openChannel("exec");
channel.setErrStream(System.err);
在另一個線程我有一些東西,它使用Java util的記錄器(默認情況下將日誌寫入System.err)。 一旦創建了jsch會話,我就不會在第二個線程的控制檯中看到記錄器消息。當我刪除此行:
channel.setErrStream(System.err);
或設置通道的錯誤流爲null,從我的第二個線程記錄消息將顯示在控制檯就好了。
如果jsch會話在設置時擁有System.err流,並且這就是記錄器無法使用的原因,那麼當會話的錯誤流設置爲null時會發生什麼?如果不是這種情況,那麼爲什麼在使用System.err進行會話開始後不會出現記錄器消息?
如果有人能解釋這一點,那將是非常有用的。
非常感謝您的解釋!現在這是有道理的。並且可能當我沒有設置錯誤流時,默認情況下它將被設置爲System.err,其版本爲2個參數,選項可以在斷開連接後保持打開狀態。 – Jessy