[英]logger(java.util.logging) suddenly stops printing the output into the console though it printing in the file
我正在使用java.util.logging来设置记录器,下面是代码: fh = new FileHandler(file.getAbsolutePath()); logger.addHandler(fh); SimpleFormatter formatter = new SimpleFormatter(); fh.setFormatter(formatter); logger.setLevel(Level.ALL);
fh = new FileHandler(file.getAbsolutePath()); logger.addHandler(fh); SimpleFormatter formatter = new SimpleFormatter(); fh.setFormatter(formatter); logger.setLevel(Level.ALL);
记录器可以很好地与控制台和文件配合使用,但是在下面的JSch代码段`Channel channel = 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 channel.disconnect中所述, 防止打印日志
您必须更改:
((ChannelExec) channel).setErrStream(System.err);
至
((ChannelExec) channel).setErrStream(System.err, true);
否则,关闭通道时将关闭System.err
,这将在退出时发生。 关闭System.err
将阻止您在控制台上看到输出。
另一种选择是将System.err
包装在忽略调用close的流中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.