对于耗时较长且仅批量写入日志文件的过程,我如何使用类似 tail -f 的功能?

对于耗时较长且仅批量写入日志文件的过程,我如何使用类似 tail -f 的功能?

我在 Jenkins(确切地说是 Unity3D)中有一个耗时很长的批处理过程,它没有向控制台提供任何输出。

它只写入日志文件unityLog.txt,并且不是向控制台本身产生任何输出。

我需要在将输出附加到控制台中的日志文件时显示它,以便用户可以通过 Jenkins Web 界面看到它。

所以我目前正在做的是(更多关于Unity 命令行参数

E:\Unity\2019.3.3f1\Editor\Unity.exe -quit -batchmode -projectPath E:\Projects\Example -executeMethod JENKINS.AutoBuilder.PerformBuild -logFile unityLog.txt -buildFolder E:\Projects\Example\Build

type unityLog.txt

该命令实际上在项目文件夹中运行,因此它可以工作,但仅在 unity 完成后才显示文件的内容。

我已经读过很多类似的问题显示 Windows 命令提示符输出并将其重定向到文件它工作得很好,但他们总是假设命令本身会产生任何直接的控制台输出。

正如所说,这里的情况并非如此。

因此我需要的实际上是一种批量执行在 bash 中我可能会做的事情的形式(这也只是一个例子,不幸的是我也不是 bash 专家 ;))

function MyLongTakingProcess()
{
    pid=$!

    E:\Unity\2019.3.3f1\Editor\Unity.exe -quit -batchmode -projectPath E:\Projects\Example -executeMethod JENKINS.AutoBuilder.PerformBuild -logFile unityLog.txt -buildFolder E:\Projects\Example\Build       

    kill $pid
}

touch unityLog.txt
tail -f unityLog.txt & MyLongTakingProcess

永久显示添加的行,但在命令完成后立即取消。

知道如何实现这一点吗?

答案1

引用您链接的文档(重点是我的):

指定 Unity 写入编辑器或 Windows/Linux/OSX 独立日志文件的位置。要输出到控制台,请指定路径名 -。在 Windows 上,指定 - 选项以使输出转到 stdout,默认情况下它不是控制台。

比,作为这个答案指出您可以使用Tee-ObjectPowerShell 将该标准输出复制到文件中,以备不时之需。

答案2

如果我理解了这个问题,你希望在 Windows 中跟踪日志。如果这是你的用例,那么请查看裸尾. 它是一个跟踪日志文件的 Windows 实用程序,用于实时日志分析。

答案3

我发现我可以实现我所寻找的目标,方法是执行以下操作

首先我创建文件(相当于touch

echo. 2>test.txt

然后我启动一个“后台”进程powershell -c "get-content test.txt -wait"(相当于tail -f test.txt

start /b "logoutput" powershell -c "get-content test.txt -wait -ErrorAction Ignore"

附加功能-ErrorAction Ignore会隐藏控制台中的任何错误。

然后我开始实际的耗时任务,该任务生成输出以test.txt使用

start /b "long" /wait LONGTEST.bat

为了等待它完成

然后最后我只需使用

del test.txt

删除文件会导致 powershell 退出并出现错误。但是我使用 解决了该错误-ErrorAction Ignore


所以总共

echo. 2>test.txt
start /b "logoutput" powershell -c "get-content test.txt -wait -ErrorAction Ignore"
start /b "long" /wait LONGTEST.bat
del test.txt

get-content使用这个,我现在可以在控制台中看到完整的日志,并且最终能够“杀死”(使失败退出)该进程。

相关内容