logger(java.util.logging)突然停止将输出打印到控制台,尽管它在文件中打印

时间:2016-12-23 06:58:58

标签: java logging jsch 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代码片段之后         `频道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) {
        }
    }`

我想在我执行命令时处理程序已经改变了。如何重置处理程序,以便它也开始打印到控制台。

1 个答案:

答案 0 :(得分:1)

JSch channel.disconnect prevent logs from printing

中所述

你必须改变:

((ChannelExec) channel).setErrStream(System.err);

((ChannelExec) channel).setErrStream(System.err, true);

否则当关闭频道时会关闭System.err,这将在退出时发生。关闭System.err将阻止您在控制台上看到输出。

另一种选择是将System.err包装在一个忽略调用close的流中。