java - 记录 Java 输出
问题描述
我想记录从 PowerShell 启动的 Java 文件的每个输出。Java 代码在一个循环中,如下所示:
foreach ($file in Get-ChildItem $propertyFilesDir) {
& $javaExe -classpath "$classPath" com.tech.test.Export "$PropertyFilesDir\$file"
}
记录循环的第一个输出,但不记录所有其他输出。
我还尝试了它Start-Process
并重定向了stdout和sterr。打电话cmd /c "xxx"
也打不通。
解决方案
PowerShell v3 或更高版本:
& $javaExe ... *>> 'C:\your.log'
>>
附加到文件。*
将所有输出流合并为一个。
PowerShell v2 或更早版本:
& $javaExe ... >> 'C:\your.log' 2>&1
在 PowerShell v3 之前,只能重定向成功和错误输出流。不支持重定向其他流。2>&1
将错误输出流与成功输出流合并,以便正常和错误输出到同一个文件。
当然,您也可以将每个流重定向到单个文件(只要支持流的重定向):
& $javaExe ... >> 'C:\output.log' 2>> 'C:\error.log' [3>> 'C:\warning.log' ...]
从控制台记录所有内容的另一个选项是Start-Transcript
cmdlet:
Start-Transcript -Path 'C:\your.log' -NoClobber
foreach ($file in Get-ChildItem $propertyFilesDir) {
...
}
Stop-Transcript
不起作用的是重定向整个循环输出:
foreach ($file in Get-ChildItem $propertyFilesDir) {
...
} > 'C:\path\to\your.log' 2>&1
您需要使用ForEach-Object
而不是foreach
循环才能以这种方式重定向输出:
Get-ChildItem $propertyFilesDir | ForEach-Object {
...
} > 'C:\path\to\your.log' 2>&1
推荐阅读
- vb.net - 使用 vb.net 中的查询检测冲突时间?
- android - 从第二个活动返回导航后,如何在不缓冲的情况下播放视频?
- css - 程序看不到我的视频(CSS、EXPRESS)
- javascript - 获取 @types/node 的正确类型
- javascript - Javascript 在 jsf 中单击按钮时无法获取正确的 id
- java - 无法运行简单的“Hello World!” 网络中断时的 Java 程序
- ios - 我将如何映射/保存这些数据?
- flutter - 在 Flutter 中使用子中心对栈子进行相对定位
- c# - Json 对象到 xamarin 列表视图
- scala - 如何从 Ignite Cache 中获取更新的值?