在Windows中将错误流重定向到文件和控制台

时间:2011-05-27 08:01:38

标签: console stream pipe stderr redirectstandardoutput

我想将错误流从java控制台应用程序重定向到文件和控制台。在正常情况下,错误仅显示在控制台中。我想在控制台和文件中显示。我怎样才能做到这一点?我写的时候:

java -classpath lib.jar com.hertz.test.Blad 2>error.log

然后错误重定向到文件但我没有在控制台上看到它们。在这种情况下,是否有人知道如何在日志中添加日期和时间?

我在Windows 2003 Server中工作。

1 个答案:

答案 0 :(得分:3)

这当然是通过过滤器管道输出的一个简单练习,在这种情况下是tee命令,它在Microsoft的命令解释器中完成,与JP Software的TCC / LE和(非)相同。 C-shell系列)Unix shell:

java -classpath lib.jar com.hertz.test.Blad 2>&1 | tee error-and-output.log

以不同的方式处理标准输出和标准错误只不过是重定向语法的一个练习,这个例子只是几个可能性之一,而且是一个单独的问题。

java -classpath lib.jar com.hertz.test.Blad 2>&1 1>con | tee error.log

剩下的就是获得tee命令。有几种可能性:

  • 使用Unix tee命令的端口。有多种选择。提到的是GNUWin32cygwinunxutils。不太知名但在某些方面更好的是SFUA utility toolkit中的工具,它们运行在Subsystem for UNIX-based Applications中,它出现在Windows 7旗舰版和Windows Server 2008 R2的复选框中。 (对于Windows XP和Windows Server 2003,可以download并安装Services for UNIX version 3.5。)此工具包具有大量命令行TUI工具,来自mvdu ,通过Korn和C shell,到perlawk。它有x86-64和IA64两种版本以及x86-32。这些程序在Windows本地适当的POSIX环境中运行,而不是在Win32上使用模拟器DLL(例如cygwin1.dll)分层。是的,工具包有tee,还有大约300个。
  • 使用人们编写和发布的众多原生Win32 tee命令之一。其中一个是Ritchie Lawrence's MTEE,您可以看到/D/T选项,为其处理的每一行添加时间和日期戳。
  • 使用内置TEE命令附带的替换命令解释程序。 JP Software's TCC/LE就是这样。 TCC / LE有a built in TEE command。如您所见,它还具有/D/T选项,可为其处理的每一行添加时间和日期戳。

顺便说一句:您的应用程序最好添加日期和时间戳,而不是TEE命令对它们进行后处理。由于多种原因,与应用程序在标准流为管道时的行为方式以及管道如何工作有关,每个输出行在创建应用程序时都不一定由TEE处理。余地将影响你看到的时间戳的相对(相互之间)和绝对(到挂钟)准确度。