我应该将消息记录到 stderr 还是 stdout?

Posted

技术标签:

【中文标题】我应该将消息记录到 stderr 还是 stdout?【英文标题】:Should I log messages to stderr or stdout? 【发布时间】:2011-06-22 14:09:42 【问题描述】:

我正在编写一个程序,我想为其编写自定义日志记录工具(例如诊断、通知、警告、错误)。

我应该使用stdoutstderr 流来执行此操作吗?它是一种解释器,用户可以要求它打印输出。

编辑:请停止向我推荐日志框架:(

【问题讨论】:

如果你使用像 java 这样的语言,为什么不使用一个著名的日志框架,比如 log4j? 我真的建议您在花时间实现日志记录之前查看一些日志库。如果您让我们知道您使用的是哪种语言,我相信会有很多建议。 您使用什么语言?是c还是c++? 前四位评论者似乎认为 rfw 是在寻求有关如何编写日志记录代码的帮助。他不是。他已经做出了决定,他只是想知道日志系统的高级行为的最佳实践是什么。他使用的语言无关紧要。 flash,如果您告诉我们 log4j 是使用 stderr 还是 stdout,您的评论可能会更有用。 【参考方案1】:

常规输出(运行程序的实际结果)应该继续stdout,就像你在stderr 上提到的(例如诊断、通知、警告、错误)。

如果没有“常规输出”,我会说你选择哪一个并不重要。您可能会争辩说日志记录是唯一的输出,因此应该转到stdout。或者您可以争辩说它仍然是“异常信息”,应该发送到stderr

【讨论】:

因为它是一个解释器,我希望大多数用户输出一些东西到stdout。它可能支持打印到stderr,但我猜那是他们自己的葬礼......【参考方案2】:

你有没有给stdout写点别的东西?如果答案是Yes,那么有人很难区分正常流程和用于从stdout 重定向的文件中间的错误。

如果stdout 将用作另一个程序的输入怎么办?它能够解析此调试信息吗?在这种情况下,最好只将严重错误写入stderr。如果您需要编写其他内容,您可以考虑写入其他日志文件。

【讨论】:

以上是关于我应该将消息记录到 stderr 还是 stdout?的主要内容,如果未能解决你的问题,请参考以下文章

如何关闭 libavformat 错误消息

如何在Python中异步记录stdout / stderr?

将Loggers`消息重定向到sys.stdout和sys.stderr

有啥方法可以将 sd_journal_send 重定向到 stdout 或 stderr?

Logging系统

将 Node 的“永久”日志记录到 syslog