如何在文件中(仅)捕获 xtrace 输出?

如何在文件中(仅)捕获 xtrace 输出?

我知道我可以将xtrace输出重定向到some_file类似这样的内容:

exec 2 >> some_file
set +x

...但这some_file不仅发送到xtrace输出,还发送到最初发送到 的任何其他内容fd 2,其中包括大多数错误消息和警告,所有这些都与 无关xtrace

有没有办法捕捉仅有的输出xtracesome_file

我应该补充一点,我正在寻找一种方法来做到这一点,该方法将尽可能少地扭曲xtrace输出本身,以及通过设置收集的计时信息PS4,例如

zmodload zsh/datetime
export PS4='${(j::)epochtime} %N:%i> '

答案1

可能不是您正在寻找的解决方案,但在过去遇到过类似的情况,我的首选是编写一个 python 解析器来获取跟踪文件,并仅将我关心的数据输出到结果文件中。只要您不关心的“垃圾文本”的模式可以从 xtrace 输出中预测/区分,解析应该非常容易完成。

示例 - 抓取所有提交队列中所有 IO 的跟踪,进行 20 分钟的测试,包括在 40GB-70GB 文件中读取和写入结果,但在解析出我关心的数据后,我的结果文件只有 ~1-3GB大小,并且实际上可用于分析和可视化。诚然,对于如此大的文件大小,服务器级系统大约需要 15-30 分钟才能处理完所有内容,但执行相同的过程(单独的场景,相同的想法 - 多个日志,每个日志仅约 24kb) - 我可以获取所有内容在 2 秒内将所有日志中的数据存储到单个可使用文件中。

总而言之,添加一个后处理步骤可能是值得的,这可能会为整体捕获增加几秒/分钟的时间,而不是等待一站式服务。

祝你好运!

相关内容