Logger(Java.util.logging)突然停止将输出打印到文件中,并在文件中打印到控制台中



我正在使用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包装在忽略关闭电话的流中。