Печать трассировки стека в System.out, но не в System.err

Я использую этот класс (JSch), который я не совсем понимаю, но у меня есть приблизительное представление о том, как он работает. Я пытаюсь вызвать исключение, если exitStatus не то, что я хочу. Однако, используя

e.printStackTrace() or e.printStackTrace(System.err) //does nothing

e.printStackTrace(System.out) //prints the whole stack trace.

Я никогда раньше не сталкивался с этой проблемой, поэтому мне было интересно, если это не тот API, который я не понимаю, который вызывает проблему, или трассировка стека исключений работает по-другому? У меня такое ощущение, что использование apache log4j подойдет, но мне лень его настраивать только для целей тестирования, и это не ответило бы на путаницу, почему это происходит.

Если интересно, вот код (я хочу вызвать исключение, когда exitStatus!= 0):

    Channel channel = null;
    int exitStatus = 1;
    System.out.println(command);
    try {
        channel = session.openChannel("exec");
        ChannelExec channelExec = (ChannelExec) channel;
        channelExec.setPty(true);
        channelExec.setCommand(command);
        channelExec.setInputStream(null);
        channelExec.setErrStream(System.err);
        InputStream in = channel.getInputStream();
        channel.connect();

        byte[] tmp=new byte[1024];
        int timeout = 0;
        while (true){
            while (in.available() > 0) {
                timeout = 0; // if read success, reset timeout
                int i = in.read(tmp, 0, 1024);
                if (i < 0)break;
                String status = new String(tmp, 0, i);
                /*System.out.println(status);*/
                if (status.toLowerCase().contains("incorrect password")) {
                    channel.disconnect();
                } else if (status.toLowerCase().contains("password")) {
                    OutputStream out = channel.getOutputStream();
                    out.write(args);
                    out.write('\n');
                    out.close();
                }
            }
            if (channel.isClosed()){
                exitStatus = channel.getExitStatus();
                break;
            }
            try { Thread.sleep(1000); } catch (Exception ee) { ee.printStackTrace(); }
            // nothing reads for 4 turns but stream is not closing, probably waiting for user input so exit
            if (timeout++ > 5) { 
                break;
            }
        }
    } catch (IOException ioe) {
        throw new ApplicationException(ioe);
    } catch (JSchException je) { 
        throw new ApplicationException("Could not create an exec channel for SSH. ", je);
    } finally {
        if (channel.isConnected()) channel.disconnect();
    }

  //if (exitStatus != 0) throw new MyCustomException(errormsg) 

Благодарю.

0 ответов

Другие вопросы по тегам