【问题标题】:BASH Prepend timestamp to stdout and stderrBASH 在标准输出和标准错误前添加时间戳
【发布时间】:2019-12-01 07:21:39
【问题描述】:

我正在尝试为 stdout 和 stderr 中的所有行添加时间戳。但是我不想将它们中的任何一个重定向到文件。此命令由进程管理器 (pm2) 在脚本中运行,然后将 stdout 和 stderr 记录到它们各自的文件中。我正在尝试修改流(不组合它们)并在 pm2 记录之前插入时间戳。我可以让他们中的任何一个单独工作,但遇到修改两者的问题。感谢您提供的任何帮助。

这是我的一些工作代码

python3.6 ./bot.py > >(gawk '{ print strftime("[%Y-%m-%d %H:%M:%S]"), $0 }') 2> >(gawk '{ print strftime("[%Y-%m-%d %H:%M:%S]"), $0 }')

【问题讨论】:

  • 对不起,语言混乱,我的意思是在它被 pm2 记录之前。 pm2 是运行脚本的东西。我会更新以使这一点更清楚

标签: bash process timestamp stdout stderr


【解决方案1】:

您需要将第二个gawk 命令的输出重定向回stderr:

python3.6 ./bot.py \
    > >(gawk '{ print strftime("[%Y-%m-%d %H:%M:%S]"), $0 }') \
   2> >(gawk '{ print strftime("[%Y-%m-%d %H:%M:%S]"), $0 }' >&2)
#                                             this part here ^^^

否则,第二个gawk 命令将从python3.6 的标准错误中获取输入,但将输出发送到与其他所有内容相同的标准输出。

【讨论】:

  • 谢谢,这正是我想要的。我需要完成最后一块拼图。那部分是 fflush() 最终代码如下所示:python3.6 ./bot.py > >(gawk '{ print strftime("[%Y-%m-%d %H:%M:%S]"), $0 } fflush()') 2> >(gawk '{ print strftime("[%Y-%m-%d %H:%M:%S]"), $0 } fflush()' >&2)
猜你喜欢
  • 1970-01-01
  • 2013-05-06
  • 1970-01-01
  • 2014-12-28
  • 1970-01-01
  • 2012-11-28
  • 2023-03-20
  • 1970-01-01
相关资源
最近更新 更多