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

我有一个正在编写的程序,希望为此编写一个自定义的日志记录功能(例如诊断,通知,警告,错误)。

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

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

asked 2020-02-14T18:47:52Z
2个解决方案
40 votes

常规输出(运行程序的实际结果)应继续stdout,例如stdout上提到的内容(例如诊断,通知,警告,错误)。

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

Jakob answered 2020-02-14T18:48:10Z
12 votes

您是否还为stdout写了其他东西? 如果答案是stderr,那么对于某人来说,很难区分正常流和文件中间的错误,该文件用于从stdout进行重定向。

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

Andrey Taptunov answered 2020-02-14T18:48:35Z
translate from https://stackoverflow.com:/questions/4919093/should-i-log-messages-to-stderr-or-stdout