我应该将消息记录到 stderr 还是 stdout?
Posted
技术标签:
【中文标题】我应该将消息记录到 stderr 还是 stdout?【英文标题】:Should I log messages to stderr or stdout? 【发布时间】:2011-06-22 14:09:42 【问题描述】:我正在编写一个程序,我想为其编写自定义日志记录工具(例如诊断、通知、警告、错误)。
我应该使用stdout
或stderr
流来执行此操作吗?它是一种解释器,用户可以要求它打印输出。
编辑:请停止向我推荐日志框架:(
【问题讨论】:
如果你使用像 java 这样的语言,为什么不使用一个著名的日志框架,比如 log4j? 我真的建议您在花时间实现日志记录之前查看一些日志库。如果您让我们知道您使用的是哪种语言,我相信会有很多建议。 您使用什么语言?是c还是c++? 前四位评论者似乎认为 rfw 是在寻求有关如何编写日志记录代码的帮助。他不是。他已经做出了决定,他只是想知道日志系统的高级行为的最佳实践是什么。他使用的语言无关紧要。 flash,如果您告诉我们 log4j 是使用 stderr 还是 stdout,您的评论可能会更有用。 【参考方案1】:常规输出(运行程序的实际结果)应该继续stdout
,就像你在stderr
上提到的(例如诊断、通知、警告、错误)。
如果没有“常规输出”,我会说你选择哪一个并不重要。您可能会争辩说日志记录是唯一的输出,因此应该转到stdout
。或者您可以争辩说它仍然是“异常信息”,应该发送到stderr
。
【讨论】:
因为它是一个解释器,我希望大多数用户输出一些东西到stdout
。它可能支持打印到stderr
,但我猜那是他们自己的葬礼......【参考方案2】:
你有没有给stdout
写点别的东西?如果答案是Yes
,那么有人很难区分正常流程和用于从stdout
重定向的文件中间的错误。
如果stdout
将用作另一个程序的输入怎么办?它能够解析此调试信息吗?在这种情况下,最好只将严重错误写入stderr
。如果您需要编写其他内容,您可以考虑写入其他日志文件。
【讨论】:
以上是关于我应该将消息记录到 stderr 还是 stdout?的主要内容,如果未能解决你的问题,请参考以下文章
如何在Python中异步记录stdout / stderr?
将Loggers`消息重定向到sys.stdout和sys.stderr