現在、小さな Windows バッチ コンソールの出力をログ ファイルにリダイレクトする際に問題が発生しています。私の Java アプリケーションは、終了を待たずに Runtime.exec() 呼び出しを開始し、出力をログに記録する必要があります。ここに私のロガークラスがあります:
public class BatchThreadLogger extends Thread {
private Process process;
private String logFilePath;
private static final Logger logger = Logger.getLogger(BatchThreadLogger.class);
public BatchThreadLogger(Process process, String logFilePath) {
this.process = process;
this.logFilePath = logFilePath;
}
public void run() {
try {
// create logging file
File file = new File(logFilePath);
file.createNewFile();
// create a writer object
OutputStream os = new FileOutputStream(file);
PrintWriter pw = new PrintWriter(os);
// catch the process output in an InputStream
InputStreamReader isr = new InputStreamReader(process.getInputStream());
BufferedReader br = new BufferedReader(isr);
// wait for the process to complete
int processStatus = process.waitFor();
// redirect the output to the log file
String line = null;
while ((line = br.readLine()) != null) {
pw.println(line);
}
// add a small message with the return code to the log
pw.println("********************************************");
pw.println("********************************************");
pw.println("Batch call completed with return status " + processStatus);
pw.flush();
os.close();
}
catch (IOException e) {
logger.error("IOException raised during batch logging on file " + logFilePath, e);
}
catch (InterruptedException e) {
logger.error("InterruptedException raised during batch process execution", e);
}
}
}
私の呼び出しは非常に簡単です:
Process process = Runtime.getRuntime().exec(command);
BatchThreadLogger logger = new BatchThreadLogger(process, logFilePath);
logger.start();
私のコマンドは現在、2 つのパラメーターを指定して test.bat を呼び出しているだけです。私のテストバッチは次のようになりました:
echo "BATCH CALLED WITH PARAMETER %1 AND %2"
exit
ただし、ログファイルには次のもののみが含まれます:
********************************************
********************************************
Batch call completed with return status 0
waitFor()
出力をログ ファイルにリダイレクトするコードの前後に呼び出しを配置しようとしましたが、成功しませんでした。起動中のコマンドの黒い画面が常に表示されますが、ログには何もありません...
私は何かが欠けていますが、何が理解できません...