나는스칼라프로젝트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"을 추가하면 STDERR이 아닌 STDOUT을 해당 파일로만 리디렉션합니다.
오류를 표준 출력과 동일한 파일로 출력하려면 다음을 사용해야 합니다.
sbt clean test > log.log 2>&1
"2>&1"이 하는 일은 표준 출력 결과와 동일한 위치에 오류를 출력한다는 것입니다.
다음과 같이 할 수도 있습니다.
sbt clean test > log.log 2>error.log
분리하려는 경우 STDOUT을 log.log에 출력하고 STDERR을 error.log라는 두 번째 파일에 출력합니다.
명령 리디렉터 연산자에 대해 이 내용을 참조하세요.