重定向 stdout 和 stderr,仅在 stderr 上使用时间戳

重定向 stdout 和 stderr,仅在 stderr 上使用时间戳

我正在尝试更好地记录我没有编写的测试程序。我希望 STDERR 输出的所有行都有时间戳,但如果可能的话我想保留 STDOUT。我还想要一个文件(all.txt)来记录stdout和stderr(带或不带STDERR时间戳),以及一个专用于STDERR输出的文件(errors.txt,带时间戳)

还,我不在乎终端是否回显任何内容。这是一个批处理式的程序。

我确实查看了 rsyslog,这可能会在稍后出现,但这是一个我应该能够真正快速破解的解决方案......至少,如果我了解更多有关输出重定向的信息。我读过很多类似的问题,但显然与这种具体情况无关。

我认为为了将时间戳添加到 stderr 输出,我想使用管道和这个问题中的技术:https://serverfault.com/questions/310098/adding-a-timestamp-to-bash-script-log

这里最干净的解决方案是什么?请注意,我的 RHEL5 系统运行的是 bash 3.2.25。

            +----stdout-------------------+
           /                               \
test.pl --+                                 +--> all.txt
           \                               /
            +----stderr | add_timestamps -+----> errors.txt

答案1

我认为这会做你想要的:

test.pl 2>&1 >all.txt | add_timestamps | tee -a all.txt > errors.txt

  • 将 stderr 重定向到 stdout(以便我们稍后可以通过管道传输)
  • 将(原始)标准输出重定向到all.txt
  • 通过管道 stdout(现在包含错误消息)到add_timestamps
  • 用于tee将错误(带时间戳)附加到all.txt
  • 最后,还将错误写入errors.txt

相关内容