Ich versuche, eineScalaProjekt mitsbt, also führe ich einen Befehl aus:
sbt clean test > log.log
Das bedeutet, dass alle Nachrichten, die das sbt-Tool in die Windows-Konsole schreibt, in die Datei „log.log“ geschrieben werden sollten. Aber manchmal bekomme ich den Stacktrace in die Konsole geschrieben und nicht in die Datei:
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
Warum leitet der Befehl ">" nicht alle Nachrichten in eine Datei um?
Antwort1
Was Sie eingefügt haben, ist nicht die Standardausgabe des Befehls (STDOUT), sondern die Fehlerausgabe des Befehls (STDERR).
Wenn Sie dem Befehl "> output_file" hinzufügen, leiten Sie nur STDOUT zu dieser Datei um, nicht STDERR.
Wenn Sie Fehler in dieselbe Datei wie die Standardausgabe ausgeben möchten, verwenden Sie
sbt clean test > log.log 2>&1
was "2>&1" bewirkt, ist, dass der Fehler an derselben Stelle ausgegeben werden soll, an der auch die Standardausgabeergebnisse liegen.
Sie können auch Folgendes tun:
sbt clean test > log.log 2>error.log
Es wird STDOUT an log.log und STDERR an eine zweite Datei namens error.log ausgegeben, wenn Sie sie trennen möchten.
Lesen Sie hier mehr über Befehlsumleitungsoperatoren