我正在尝试为我没有编写的测试程序更好地记录日志。我希望 STDERR 输出的所有行都有时间戳,但如果可能的话,我想单独保留 STDOUT。我还想要一个文件 (all.txt) 来记录 stdout 和 stderr(带有或不带有 STDERR 时间戳),以及一个专用于 STDERR 输出的文件(errors.txt,带有时间戳)
另外,我不在乎是否有任何内容回显到终端。这是一个批处理式程序。
我确实查看了 rsyslog 并且稍后可能会出现,但这是一个我应该能够真正快速破解的解决方案......至少,如果我对输出重定向有更多的了解。我读了一堆类似的问题,但显然与这种确切情况无关。
我认为为了向 stderr 输出添加时间戳,我想使用管道和来自这个问题的技术:https : //serverfault.com/questions/310098/adding-a-timestamp-to-bash-script-log
这里最干净的解决方案是什么?请注意,我有 bash 3.2.25 上的 RHEL5 系统。
+----stdout-------------------+
/ \
test.pl --+ +--> all.txt
\ /
+----stderr | add_timestamps -+----> errors.txt
Run Code Online (Sandbox Code Playgroud)
我认为这会做你想做的:
test.pl 2>&1 >all.txt | add_timestamps | tee -a all.txt > errors.txt
all.txtadd_timestampstee附加的错误(时间戳)以all.txterrors.txt