我正在创建 jsch 会话以远程运行命令,但我正面临一种奇怪的行为。在我的一个线程中,我创建会话,将输出流设置为 System.err 并使用会话。
ChannelExec channel = (ChannelExec) session.openChannel("exec");
channel.setErrStream(System.err);
在另一个线程中,我有一些使用 Java util 记录器的东西(默认情况下将日志写入 System.err)。创建 jsch 会话后,我不再在第二个线程的控制台中看到记录器消息。当我删除这一行时:
channel.setErrStream(System.err);
或将通道的错误流设置为空,来自我的第二个线程的记录器消息出现在控制台中就好了。
如果 jsch session 在设置时拥有 System.err 流,这就是 logger 无法使用的原因,那么当 session 的错误流设置为 null 时会发生什么?如果不是这种情况,那么为什么在会话开始使用 System.err 后没有出现记录器消息?
如果有人可以解释这一点,那将非常有用。