私は構築しようとしていますスカラプロジェクトsbtなので、次のコマンドを実行します:
sbt clean test > log.log
つまり、sbt ツールが Windows コンソールに書き込むメッセージはすべて、「log.log」ファイルに書き込まれるはずです。しかし、スタック トレースがファイルではなくコンソールに書き込まれることがあります。
C:\path>sbt clean test > log.log
java.lang.ExceptionInInitializerError
at scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24)
at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24)
at scala.concurrent.impl.ExecutionContextImpl$AdaptedForkJoinTask.exec(ExecutionContextImpl.scala:121)
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
Caused by: java.lang.ClassCastException: Class org.infinispan.configuration.parsing.Parser60 does not implement org.infinispan.configuration.parsing.ConfigurationParser
">" コマンドがすべてのメッセージをファイルにリダイレクトしないのはなぜですか?
答え1
貼り付けたのはコマンドの標準出力(STDOUT)ではなく、コマンドのエラー出力(STDERR)です。
コマンドに "> output_file" を追加すると、STDOUT のみがそのファイルにリダイレクトされ、STDERR はリダイレクトされません。
エラーを標準出力と同じファイルに出力したい場合は、
sbt clean test > log.log 2>&1
「2>&1」は、標準出力の結果と同じ場所にエラーを出力することを意味します。
次のようなこともできます:
sbt clean test > log.log 2>error.log
分離したい場合は、STDOUT を log.log に出力し、STDERR を error.log という 2 番目のファイルに出力します。
コマンドリダイレクタ演算子についてはこちらをご覧ください