← 全部文章

技术与生活 / 一篇记录

结果与诊断信息应该走不同通道

正常结果适合供下游解析,诊断信息应写到标准错误。

一个命令既要给人看,也可能给下一个程序处理。将数据放在标准输出、将警告放在标准错误,可以让调用方按需要保存或过滤,而不破坏数据格式。

从一个例子看起

以下示例使用 Bash,请在独立测试目录中理解输入、输出和退出码。

printf 'result\n'; printf 'warning\n' >&2

分别重定向两个输出通道,确认内容没有混在一起。

排查时再往前走一步

将两个通道分别写入文件,再观察各自内容。设计 JSON 命令行接口时,尤其要避免把一行调试提示混进正常的 JSON 文档。

调用者也可以只重定向标准输出,继续让错误信息显示在终端。这样生成的数据文件不会夹杂诊断内容。若必须合并两个通道,最好只用于面向人的日志,而非结构化输入。

不要把调试日志写进需要解析的 JSON 输出。

参考:Shell 文档。

搜索文章

输入关键词,找回一篇记录。