我正在使用java.util.logging设置记录器,这是代码: fh = new FileHandler(file.getAbsolutePath());
logger.addHandler(fh);
SimpleFormatter formatter = new SimpleFormatter();
fh.setFormatter(formatter);
logger.setLevel(Level.ALL);
该记录器可与控制台和文件一起工作。但是在以下JSCH代码段之后 `频道频道= session.openchannel(" exec");
((ChannelExec) channel).setCommand(cmd1);
channel.setInputStream(null);
((ChannelExec) channel).setErrStream(System.err);
logger.info("creating tar ,executing command :"+cmd1);
channel.connect();
while (true) {
if (channel.isClosed()) {
System.out.println( logger.getHandlers());
// doesn't log afterwards
logger.info("exit-status: " + channel.getExitStatus());
if (channel.getExitStatus() == 0)
logger.info("tar file with " + tarFileName
+ "has been created successfully at " + path);
break;
}
try {
Thread.sleep(1000);
} catch (Exception ee) {
}
}`
我猜我执行命令时的处理程序已更改。我如何重置处理程序,以便它也开始打印到控制台中。
如JSCH频道中所述。disconnect防止日志打印
您必须更改:
((ChannelExec) channel).setErrStream(System.err);
to
((ChannelExec) channel).setErrStream(System.err, true);
否则,当关闭通道时,System.err
将关闭,该通道将在退出时发生。关闭System.err
将阻止您在控制台上看到输出。
另一个选项是将System.err
包装在忽略关闭电话的流中。