将 STDERR 和 STDOUT 重定向到每行带有时间戳的文件

将 STDERR 和 STDOUT 重定向到每行带有时间戳的文件

在我的 CentOS 上,我尝试执行一个包含无限循环的 php 脚本,以便在其中执行一些奇特的操作。无限循环可能不是大多数情况下的准确解决方案,但对于我的测试用例来说,它是准确的解决方案。如果此循环中发生错误,则错误将写入输出文件(stdout 中的所有内容也是如此)。这就是我目前所做的。

exec php testfile.php >> output.log 2>&1

这按预期工作,但我想知道 stdout 或 stderr 何时将某些内容写入文件,因此我需要在每一行上添加某种时间戳。

我已经尝试过类似但是,如果我按照那里提到的那样做,根本就没有输出(我怀疑这是因为它不是一个简单的 shell 脚本)。

是否可以将echotestfile.php 中的每个行和 stderr 中的每个错误重定向到 output.log,并在每行上附加一个时间戳?

答案1

您可以使用 gnu awk 在每行前面加上格式化的日期时间字符串。但是缓冲可能会导致某些行重新排序或最后几行消失。为了避免这种情况,使用标准缓冲区被推荐。

stdbuf -i0 -o0 php testfile.php  2>&1 | gawk '{print strftime("%Y%m%d-%H%M%S"), $0}' >> output.log 

相关内容