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

标签 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 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 prevent logs from printing 中所述

你必须改变:

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

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

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

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

关于java - logger(java.util.logging) 突然停止将输出打印到控制台,尽管它在文件中打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41296659/

相关文章:

java - BigInteger 除法() 方法不起作用?

java - Kubernetes 中的 Kafka UnknownHostException 异常

java - Log4j2 创建日志文件但不写入它

c# - NLog 是否在记录某些内容时引发事件?

java - 从哪里获取 JSch 连接到 AWS EC2 的用户名/密码?

java - 不同分辨率下的动态 EditText 大小不同

java - 元素在 (x,y) 点不可点击

docker - 从 pod 内部访问 Kubernetes pod 的日志文件?

java - 使用 JSCH Java 反向 SSH 隧道

java - 使用来自 ChannelSftp.get 的输入流时 ChannelSftp.put 方法卡住