2016-12-23 2 views
0

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 ");私はcommand.Howを実行していたときにハンドラが変更されていると思いますlogger(java.util.logging)は、出力をファイルに出力しても突然出力を停止します。

((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) { 
     } 
    }` 

は、私はそれが同様にコンソールに印刷を開始するようにハンドラをリセットすることができます。あなたが変更する必要が

+0

すべてのロガーを['private static final'として宣言しているので、ガベージコレクションされていませんか?](http://stackoverflow.com/questions/22689831/log-file-not-being-updated-after-数秒間使用中のロガーとファイルハンドラー) – jmehrens

+0

はい、ロガーはプライベートスタティックで、次のように定義されています。 – Skull

+0

プライベートスタティックロガーロガー; – Skull

答えて

1

JSch channel.disconnect prevent logs from printing

で説明したように:チャネルは、終了時に起こるであろう閉じているとき

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

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

にそうでない場合System.errが閉じられています。 System.errを閉じると、コンソールに出力が表示されなくなります。

もう1つのオプションは、閉じるコールを無視するストリームにSystem.errをラップすることです。

関連する問題